【发布时间】:2014-10-31 16:20:31
【问题描述】:
给定一个简单的 Linq to EF (EF5) 语句:
MyDBSet.Select(x => x.Column1)
将生成以下 SQL:
SELECT
[c].[Column1] AS [Column1]
FROM (SELECT
[MyDBSet].[Column1] AS [Column1],
[MyDBSet].[Column2] AS [Column2],
...
[MyDBSet].[ColumnN] AS [ColumnN]
FROM [dbo].[MyDBSet] as [MyDBSet]) as [c]
返回所有列的额外嵌套查询确实是不必要的。它可能是无害的,但我认为我在如何将其扩展到相当复杂的查询方面遇到了问题。那么:有没有办法让 EF 在没有这个额外的嵌套查询的情况下生成 SQL?我的 linq 语句是用表达式树生成的,所以我想避免使用任何传递 SQL。
【问题讨论】:
-
您为什么需要这样做?优化代码不是查询提供者的工作。数据库在优化该查询时应该没有问题。
-
将 DBContext API 中的惰性、急切和显式加载视为在 EF 中创建 SQL 查询的不同方式。
-
@Servy,您不能假设数据库会优化查询。我认为他想创建更复杂的查询。 SQL 是一种奇怪的生物 - 有时它会优化,而有时这种类型的小变化会影响性能。
标签: c# sql-server linq entity-framework