これは、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 で同等の操作を行うときに機能します)。