.net - Entity Framework 4 通过 WCF 进行 LINQ to Entities 查询

标签 .net wcf .net-4.0 entity-framework-4 linq-to-entities

我需要创建一个 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/

相关文章:

visual-studio - dotnet framework 4 中的字符串比较

c# - IEnumerable 在与 namespace System.Collections 一起使用时报告编译器错误

c# - 如何在一个应用程序中加载不同版本的相同程序集?

.net - 简单来说,WCF是什么?

C# 接口(interface)调试信息未链接到源

c# - int 列表的内存大小

c# - DocumentDB STARTSWITH 无法在 .NET 上运行

c# - Async/Await 和 Dispatcher 之间的区别

wcf - 如何向 WCF SyndicationFeed 添加另一个命名空间?

c# - IIS 7 ERR_CONNECTION_TIMED_OUT 仅适用于公共(public) IP