2014-07-01 204 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()结尾,则会强制它单独执行。基本上它会收集工作,直到某件事实际上需要结果。 –