我的目标就是这种形式
List<SignUp>
class SignUp
{
public int Id { get ; set;}
public int VersionId { get ; set;}
public int PersonId{ get ; set;}
public DateTime? SignUpDate { get ; set;}
}
Run Code Online (Sandbox Code Playgroud)
人们注册到文档的版本.有些版本永远不会存档,他们每年都要辞职.所以我最终得到了像
SignUp s = new SignUp { Id = 1, VersionId = 1, PersonId = 5}
SignUp s2 = new SignUp { Id = 2, VersionId = 2, PersonId = 5}
SignUp s3 = new SignUp { Id = 3, VersionId = 1, PersonId = 5}
Run Code Online (Sandbox Code Playgroud)
没有这个有s,s2,s3的列表在personId,versionId组合上有2个重复,它们是s&s3.唯一的事情是s3的Id比s高.因此我想消除s并只显示s2,s3(s是旧版本,我忽略它)
如果可能,如何使用linq查询实现这一目标?
怎么样:
List<SignUp> signups = ...
var filteredSignups = from signup in signups
group signup by new { signup.PersonId, signup.VersionId }
into pvIdGroup
select pvIdGroup.OrderBy(groupedSignUp => groupedSignUp.Id)
.Last();
Run Code Online (Sandbox Code Playgroud)
我们的想法是按两个属性对项目进行分组,然后从每个组中选择"最佳"项.
如果您不希望对每个组中的项进行排序效率低,请考虑使用O(n)MaxBy
方法,例如来自morelinq的方法.
然后select
变成:
select pvIdGroup.MaxBy(groupedSignUp => groupedSignUp.Id)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2853 次 |
最近记录: |