2016-04-29 61 views
1

我有3個表A有一個ID和其他字段,B有一個ID,C對A和B中的ID有多對多的關係將SQL組轉換爲實體框架Lambda表達式

我做了一個查詢,得到的結果,我需要

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 

,我想將它轉換爲實體框架lambda表達式。但目前查詢效率不夠高。我如何在EF中創建lamda表達式並使其更高效?

+0

我不明白你爲什麼使用MAX(A.AID),因爲在返回的每條記錄中總是A.AID = C.AID,而且我會嘗試用JOINS更改笛卡爾積(A,C),這可能是在某些情況下效率更高(例如在訪問中,我不知道是否也在EF中)。也加入結果表。 –

+0

我正在使用MAX(A.AID),因爲我需要每組BID的最大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()); 

這應該返回一個實體的IQueryable,然後您可以繼續使用其他子句進行修改(如果需要)。

相關問題