为什么不是这个LINQ组通过聚合vb.net中的行?

Tom*_*day 6 sql linq vb.net linq-to-entities entity-framework

我有一张有两部分钥匙的桌子; ID列和版本号.我正在尝试选择"仅最新版本"的记录.

我正在尝试使用LINQ的表达式样式来实现GROUP BY,并拉出Version的聚合MAX值. 但是没有发生聚合.

汇总代码:

From C In Credentials

Group Join ....
Group Join ....

Group C.CredentialID, NE.ClientID, C.Version By 
     NE.ClientID, C.CredentialID Into CGroup = Group
From CG In CGroup

Select New With {
    .ClientID = CG.ClientID,
    .CredentialID = CG.CredentialID,
    .MaxVersion = CGroup.Max(Function(p) p.Version)
}
Run Code Online (Sandbox Code Playgroud)

实际结果:

ClientID CredentialID MaxVersion
1196     1            3 
1196     1            3 
1196     1            3 
1196     2            1 
Run Code Online (Sandbox Code Playgroud)

期望的结果:

ClientID CredentialID MaxVersion
1196     1            3 
1196     2            1 
Run Code Online (Sandbox Code Playgroud)

也尝试过,结果相同:

Group C By Key = New With 
     {Key NE.ClientID, Key C.CredentialID} Into CGroup = Group
From CG In CGroup

Select New With {
     .ClientID = Key.ClientID,
     .CredentialID = Key.CredentialID,
     .MaxVersion = CGroup.Max(Function(p) p.Version)
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种解决方案,该解决方案不涉及创建具有匹配属性和自定义排序/分组功能的自定义类,并且不使用查询尾部的lambda表达式.

谢谢!

Amy*_*y B 3

From CG In CGroup
Run Code Online (Sandbox Code Playgroud)

此行调用 Queryable.SelectMany 并解压组。不要解压你的团体!

删除该行并以以下内容结尾:

Select New With {
     .ClientID = CGroup.Key.ClientID,
     .CredentialID = CGroup.Key.CredentialID,
     .MaxVersion = CGroup.Max(Function(p) p.Version)
} 
Run Code Online (Sandbox Code Playgroud)