使用LINQ to Entities时返回IQueryable与ObjectQuery

时间:2010-09-04 17:57:34

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

在使用LINQ来查询类型为IQueryable的查询时,我一直在阅读,但在处理查询时,它不再是IQueryable,而是ObjectQuery }。

在这种情况下,从我的图层(存储库层)编写方法以返回IQueryable是否正确?

我需要演员?

为什么我要退回ObjectQuery

我来自LINQ to SQL背景,其中事情总是IQueryable,但EF似乎改变了这一点。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:9)

我的存储库总是返回IQueryable。原因是IQueryable不依赖于EF,而ObjectQuery则依赖于EF。因此,如果我希望我的其他图层能够持久无知,我不想引入对ObjectQuery的依赖。

ObjectQuery是IQueryable的实现,具有几个附加功能。您将很快发现的第一个功能是包含功能,该功能需要急切加载导航属性(相关实体)。第二个特征是EQL - 实体查询语言。 EQL是您查询概念模型的第二种方式。它具有与SQL类似的语法。您可以将简单查询编写为字符串,将其传递给ObjectQuery构造函数并执行查询或在Linq-To-Entities中使用它。