C# SQL group by到实体框架Lambda表达式的转换

C# SQL group by到实体框架Lambda表达式的转换,c#,sql,entity-framework,sql-server-2008,lambda,C#,Sql,Entity Framework,Sql Server 2008,Lambda,我有3个表A有一个ID和其他字段,B有一个ID,C有A和B中ID的多对多关系 我做了一个查询,得到了我需要的结果 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中

我有3个表A有一个ID和其他字段,B有一个ID,C有A和B中ID的多对多关系

我做了一个查询,得到了我需要的结果

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表达式更高效?

如果您先按所需的最大ID对结果进行降序,然后在相关表中按该ID分组,然后从每个分组中选择第一个,您应该得到所需的结果

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

这应该会返回一个实体的IQueryable,若需要的话,您可以使用附加的子句继续修改它。

我不明白为什么要使用MAX(A.AID),因为在每个返回的记录中总是A.AID=C.AID,而且我会尝试用连接来更改笛卡尔积(A,C),这在某些情况下可能更有效(例如,在access中,我不知道是否也在EF中)。还与结果表连接。我使用MAX(A.AID),因为我需要每组出价的最大帮助。是的,清除,没有看到它,将group BY C.BID与group BY C.AID错误地组合在一起;)我认为在将sql代码转换为EF之前应该优化它。EF的sql生成的代码几乎不是最优的,并且总是包含一系列嵌套的子查询。另外,如果表C包含多对多关系,为什么需要将表A和表C内部联接起来?你为什么不用max(C.AID)?