为什么使用EF实现的存储库会暴露IQueryable而不是ObjectQuery?

时间:2013-10-07 17:14:18

标签: entity-framework linq-to-entities iqueryable objectquery

Link

  

我的存储库总是返回IQueryable。原因是这样的   IQueryable不依赖于EF,而ObjectQuery则依赖于EF。所以如果我想要的话   我的其他层次是坚持无知我不想介绍   依赖于ObjectQuery。

a)我假设为什么存储库(使用EF实现)应该返回IQueryable而不是ObjectQuery,因为其他ORM也使用返回IQueryable的查询,并且通过使存储库返回{ {1}}我们可以轻松地在EF和其他ORM之间切换,而无需更改存储库的公共接口?

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

谢谢

1 个答案:

答案 0 :(得分:0)

你应该返回IQueryable,因为那是表达树的通用语言。如果它不是IQueryable,它可能是其他一些理解Expression的东西,或者它的一些可怕的自定义语言,它给你一个非常低劣的编程经验

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

如果它理解这里的Expression示例,那么它也可能只是IQueryable,因为它是IQueryable的整个 point - 是一般的抽象,每个人都可以在他们的接口中重用。