1

我有一个对象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作为分组字段。

4

1 回答 1

3

尝试这个:

Records.GroupBy(m => m.User.UserId)

GUID 是相当独特的,因此您应该能够几乎肯定地匹配(并因此分组)用户,只需比较他们的 ID。


作为替代方案,这可能是一个更简单的解决方案:

Records.GroupBy(m => m.UserId)

但是请注意,这仅在您强制UserId给定Record对象的属性必须与属于该对象的对象的UserId属性匹配时才有效。UserRecord


旁注:在您的 OP 中,您提到数据不匹配可能导致存在User具有相同UserId. 如果您希望合并“重复项”(即,某些属性可能不同,但UserId相同),该GroupBy方法将帮助您组织每个用户的记录。但是,如果所有记录都具有相同的属性,您可能会对使用该方法感兴趣Distinct,因为它可能会传递一个 lambda,并且可用于Record为每个UserId存在的对象选择一个对象。

于 2013-07-03T16:45:31.880 回答