2014-07-01 56 views
0

我是新來的實體框架,並試圖將以下查詢轉換爲正確的函數調用。實體框架查詢嵌套查詢

Select Distinct a.nodeId FROM 
    (SELECT * 
    FROM reportContents 
    Where fitId = '29' and reportId = 
     (select max(reportId) 
     from reportContents 
     where fitId = '29') 
    ) a Where (a.nodeId IS NOT NULL) 

我知道這個查詢做我想要的,但我不知道如何將它翻譯成entitiy框架!

這是我的嘗試。

var prevSelectedNodes = db.reportContents.Where(
f => f.fitId == id).Select(
f => f.nodeId).Distinct().ToList(); 

我需要以某種方式把.Select()放在哪裏調用。然而,這種事似乎不可能

謝謝你提前!

+0

是reportId unique(pk)? – Ksv3n

+2

看起來像Ksven已經回答了,但我的建議,如果你新來的EF試圖不把它看作一堆表查詢。 EF由對象組成,而不是關係表。 –

回答

2

因爲你不能創建兩個LINQ嵌套lambda表達式。你可以做兩個請求:

var maxReportId = db.reportContents.Where(r => r.fitId = "29").Max(r => r.RepordId); 
var result = db.reportContents.Where(r => r.fitId == "29" && r.reportId == maxReportId && r.nodeId != null).Select(a => a.nodeId).Distinct().ToList() ; 
+0

如果將第一條linq語句添加到第二條語句中,我希望它會生成一條SQL語句。 – Maarten

+0

正如書面所述,應該在一個聲明中進行。如果第一行以.ToList()結尾,則會強制它單獨執行。基本上它會收集工作,直到某件事實際上需要結果。 –