我需要创建一个WCF服务来返回通过Entity Framework从数据库查询的对象。我读过的大多数文章都建议我为每种类型的查询创建一个方法。但我认为这将导致我将创建的方法数量激增,例如:
最重要的是,如果需要新的查询,那么我将不得不创建一个新的方法来支持它。
必须有更好的更通用的方法来做到这一点。理想的是,如果客户端可以通过LINQ创建表达式树,通过WCF发送它,然后通过实体框架运行查询。然后我可以有一种方法来支持所有查询。例如:
或者将表达式作为字符串发送:
开发人员如何解决灵活查询的问题?
我目前在.NET 4.0中工作。安全性并不是真正的问题,因为这只是一个内部应用程序。
答案 0 :(得分:3)
根据您的描述,您不需要纯WCF服务,而是需要WCF Data Services。数据服务允许您exposing IQueryable并在客户端上定义Linq查询。
答案 1 :(得分:3)
您正在寻找的是WCF Data Services。它使用OData协议使用Linq查询数据。
Stack Overflow OData service的示例:
var query = from u in service.Users
orderby u.Reputation descending
select u;
Console.WriteLine ("Top ten Stack Overflow users");
foreach (var u in query.Take(10))
{
Console.WriteLine ("{0}: {1}", u.DisplayName, u.Reputation);
}
在上面的代码中,service.Users的类型为IQueryable<User>
,允许您使用表达式树进行查询。
您可以使用LINQPad轻松尝试SO服务,或者在VS项目中添加对服务URL的引用。