Entity framework 为什么使用EF实现的存储库应该公开IQueryable而不是ObjectQuery?

Entity framework 为什么使用EF实现的存储库应该公开IQueryable而不是ObjectQuery?,entity-framework,linq-to-entities,iqueryable,objectquery,Entity Framework,Linq To Entities,Iqueryable,Objectquery,: 我的存储库总是返回IQueryable。原因是, IQueryable不依赖于EF,而ObjectQuery依赖于EF。所以如果我想 我不想介绍我的其他层 对ObjectQuery的依赖 a) 我假设存储库(使用EF实现)应该返回IQueryable而不是ObjectQuery的原因是其他ORM也使用返回IQueryable的查询,通过让存储库返回IQueryable,我们可以轻松地在EF和其他ORM之间切换,不必更改存储库的公共界面 b) 除了EF和NHibernate之外,是否还有其他的

:

我的存储库总是返回IQueryable。原因是, IQueryable不依赖于EF,而ObjectQuery依赖于EF。所以如果我想 我不想介绍我的其他层 对ObjectQuery的依赖

a) 我假设存储库(使用EF实现)应该返回
IQueryable
而不是
ObjectQuery
的原因是其他ORM也使用返回
IQueryable
的查询,通过让存储库返回
IQueryable
,我们可以轻松地在EF和其他ORM之间切换,不必更改存储库的公共界面

b) 除了EF和NHibernate之外,是否还有其他的ORM也有返回
IQueryable
的查询


谢谢

您应该返回IQueryable,因为这是表达式树的通用语言。如果它不是IQueryable,那么它要么是其他能够理解表达式的东西,要么是一些可怕的自定义语言,它给了你一种非常糟糕的编程体验

var resultsINeed=getQueryable().Where(expression1).Select(expression2)


如果它理解这里的表达式示例,那么它也可以是IQueryable,因为这就是IQueryable的全部要点——作为一般抽象,每个人都可以在其接口中重用。

a)是b)列表。AsQueryable()也可以用于测试目的。还有OData(但它只支持IQueryable的一小部分)。感谢您的回复回复电话: