【发布时间】:2013-08-30 15:32:02
【问题描述】:
这是我使用 Linq to Entity Framework 在 LinqPad 中测试的查询的要点。
在我看来,生成的 SQL 应该以 SELECT TableA.ID AS myID 之类的内容开头。相反,SELECT 包括所有表中的所有字段。不用说,这会在其他问题中引起巨大的性能损失。我怎样才能防止这种情况发生?
var AnswerList = this.Answers
.Where(x=>
..... various conditions on x and related entities...
)
.GroupBy(x => new {x.TableA,x.TableB,x.TableC})
.Select(g=>new {
myID = g.Key.TableA.ID,
})
AnswerList.Dump();
实际上,我使用的是一种新类型而不是匿名类型,但结果都是一样的。
如果您需要我填写更多……请告诉我。
更新
我注意到我可以通过在 GroupBy 方法中明确指定我想要返回的字段来防止这个问题,例如new {x.TableA.ID ... }
但我仍然不明白为什么仅使用 Select 方法不起作用(在 Linq to SQL 中执行等效操作时它确实起作用)。
【问题讨论】:
-
不可能。您只选择了一个具有属性
myID的匿名对象。 -
嗨 - 也许我的问题不清楚 - 我试图阻止它返回数据库中的所有字段。我只想要 myID 而是返回所有字段,然后将 myID 提取到内存中。
-
您是否通过 SQL Server Management Studio Profiler 进行了测试?我测试了一个类似的查询,最上面的 SELECT 只返回一列。
-
是的,我做到了。我正在使用 LINQ to Entity Framework。如果我使用 LINQ to SQL,我会得到你的结果。
标签: c# .net linq entity-framework linq-to-entities