我有一个对象Record
它包含以下属性:
Guid RecordId
User User
Guid UserId
现在我必须进行分组并使用此Linq查询:
Records.GroupBy(m => m.User)
问题是User
对象是从2个位置填充的,有时数据不匹配属性,导致单个UserId
例如:
List<Record>
{
new Record
{
RecordId = 1,
User = new User
{
UserId = 1,
UserName = '1',
OtherProperty = false
}
UserId = 1
},
new Record
{
RecordId = 2,
User = new User
{
UserId = 1,
UserName = '1',
OtherProperty = true
}
UserId = 1
},
new Record
{
RecordId = 3,
User = new User
{
UserId = 2,
UserName = '2',
OtherProperty = false
}
UserId = 2
}
}
OtherProperty
对象中的User
不同,导致无法分组。
我需要User
对象进行分组,但实际上使用UserId
作为分组字段。
答案 0 :(得分:3)
试试这个:
Records.GroupBy(m => m.User.UserId)
GUID是相当独特的,因此您应该只需通过比较其ID就可以完全匹配(并因此分组)用户。
作为替代方案,这可能是一个更简单的解决方案:
Records.GroupBy(m => m.UserId)
但是,请注意,这只有在您强制执行给定UserId
对象的Record
属性必须与UserId
对象的User
属性匹配时才有效属于所述Record
对象。
旁注:在您的OP中,您提到数据不匹配会导致User
个对象具有相同的UserId
。如果您要合并“重复项”(即某些属性可能不同,但UserId
相同),GroupBy
方法将帮助您组织每个用户的记录。但是,如果记录都具有相同的属性,您可能会对使用Distinct
方法感兴趣,因为它可以传递lambda并可用于为每个{{1}选择一个Record
对象存在的。