2016-04-29 65 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,然后您可以继续使用其他子句进行修改(如果需要)。

相关问题