ADO.NET 数据服务框架支持的服务操作允许数据服务在由 URI 标识的服务器上公开一个方法,与所有其他 ADO.NET 数据服务资源类似,可以使用 URI 查询字符串将参数传递给服务操作方法。
通过将方法添加到继承 System.Data.Services.DataService 类和表示数据服务本身的类,可创建服务操作。
下面的代码创建一个计算位于某个指定城市的所有客户的服务操作。请注意,通过引用 this.CurrentDataSource
可获得对数据库会话的访问权。
public class Northwind : DataService<NorthwindEntities>
{
[WebGet]
public IQueryable<Customer> CustomersByCity(string city)
{
if (string.IsNullOrEmpty(city))
{
throw new ArgumentNullException("city",
"You must provide a city name argument");
}
return this.CurrentDataSource.Customers.Where("it.City = @city",
new ObjectParameter("city", city));
}
}
若要调用服务操作,请将 URI 格式与直接映射到方法参数的查询字符串参数一起使用。例如,http://host/northwind.svc/CustomersByCity?city=London
。
上面的服务操作示例不会直接返回调用方请求的数据。服务操作而是返回一个类型为 IQueryable<T> 的查询对象。.NET Framework 3.5 SP1 版的语言集成查询 (LINQ) 功能支持 IQueryable<T>。通过返回查询而不是数据,ADO.NET 数据服务框架仍可提供筛选、排序和分页等选项。例如,查询 http://host/northwind.svc/CustomersByCity?city=London&$orderby=CompanyName
构成了带有排序选项的查询,并返回按 CompanyName
排序的结果。
若要约束服务操作以便不构成其他运算符,请返回操作的结果而不是查询对象。在上面的示例中,如果该方法不返回结果,则该方法的返回类型将必须为 IEnumerable<T> 或 void。
另请参见
概念
ADO.NET 数据服务查询选项
ADO.NET 数据服务系统查询选项