在使用LINQ来查询类型为IQueryable
的查询时,我一直在阅读,但在处理查询时,它不再是IQueryable
,而是ObjectQuery
}。
在这种情况下,从我的图层(存储库层)编写方法以返回IQueryable是否正确?
我需要演员?
为什么我要退回ObjectQuery
?
我来自LINQ to SQL背景,其中事情总是IQueryable
,但EF似乎改变了这一点。
任何帮助都非常感激。
答案 0 :(得分:9)
我的存储库总是返回IQueryable。原因是IQueryable不依赖于EF,而ObjectQuery则依赖于EF。因此,如果我希望我的其他图层能够持久无知,我不想引入对ObjectQuery的依赖。
ObjectQuery是IQueryable的实现,具有几个附加功能。您将很快发现的第一个功能是包含功能,该功能需要急切加载导航属性(相关实体)。第二个特征是EQL - 实体查询语言。 EQL是您查询概念模型的第二种方式。它具有与SQL类似的语法。您可以将简单查询编写为字符串,将其传递给ObjectQuery构造函数并执行查询或在Linq-To-Entities中使用它。