我需要创建一个 WCF 服务来返回通过 Entity Framework 从数据库查询的对象。我读过的大多数文章都建议我应该为每种类型的查询创建一个方法。但我认为这会导致我将创建的方法数量激增,例如:
- GetAllCars()
- GetCarsByBrand(字符串品牌名称)
- GetCarsByYear(int 年)
- GetCarsByBrandAndYear(字符串品牌名称,int年份)
- GetCarsByTireSize( float 轮胎尺寸)
- GetCarsByEngineType(字符串引擎类型)
- GetCarsByEngineSizeAndType(浮点引擎大小,字符串引擎类型)
- GetCarsByEngineSizeBetween(float lowerEngineSize, float upperEngineSize)
- 等等..
最重要的是,如果需要新的查询,那么我将必须创建一个新方法来支持它。
必须有一种更好、更通用的方法来做到这一点。理想的情况是客户端可以通过 LINQ 创建表达式树,通过 WCF 发送它,然后通过 Entity Framework 运行查询。这样我就可以有一种方法来支持所有查询。例如:
- QueryCars(表达式表达式)
或者以字符串形式发送表达式:
- QueryCars(字符串表达式)
开发者如何解决灵活查询的问题?
我目前正在使用 .NET 4.0。安全性并不是真正的问题,因为这只是一个内部应用程序。
最佳答案
您正在寻找的是 WCF Data Services 。它使用 OData 协议(protocol)通过 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 的引用。
关于.net - Entity Framework 4 通过 WCF 进行 LINQ to Entities 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4657037/