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表达式.
谢谢!
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)
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |