2016-04-29 12 views
1

IDとその他のフィールドを持つテーブルAが3つあり、BはIDを持ち、CはAとBのIDが多対多であるSQLグループをEntity Frameworkラムダ式に変換する

は私が

select result.* 
from 
    (SELECT max(A.AID) as AID 
    FROM A, C 
    where A.AID = C.AID 
    group by C.BID) as x, A as result 
where result.AID = x.AID 

を必要と私は、エンティティフレームワークでのラムダ式に変換したいの結果を取得するクエリを作りました。しかし、現在のところ、クエリは効率的ではありません。どのように私はEFでラムダ式を作り、それをより効率的にするでしょうか?

+0

すべてのレコードで常にA.AID = C.AIDが返されるため、なぜMAX(A.AID)を使用するのかわかりません。さらに、JOINSを持つデカルト積(A、C)を変更しようとしますいくつかのケースではより効率的です(例えば、アクセスでは、私はEFでもそうであるかどうかわかりません)。また、結果表と結合する。 –

+0

BIDのグループごとに最大のAIDが必要なので、MAX(A.AID)を使用しています。 – limefluff

+0

はい、クリア、それをよく見ていないGROUP BY C.BID GROUP BY C.AID;) –

答えて

0

最初に結果を降順に並べ替えるには、最大のIDを指定してから関連テーブルのGroupBy IDを選択し、必要な結果を得るべき各グループからFirstを選択します。

var groupedResults = tempContext.A.OrderByDescending(a => a.AID 
).GroupBy(group => group.C.AID).Select(group => group.FirstOrDefault()); 

これは、あなたが、その後、必要に応じて追加の条項に修正し続けることができますAエンティティののIQueryableを返す必要があります。

関連する問題