GroupBy - 这是预期的行为吗?

时间:2013-08-28 12:44:15

标签: c# linq linq-to-entities

我有简单的EAV'场景,其中User可以在多个Usergroup中,Usergroup可以有多个Field。我选择用户,选择他的所有用户组,然后显示字段。

问题是我不想显示具有重复Key属性的字段。

现状

Fields = user.Usergroups
    .SelectMany(x => x.UsergroupFields)
    .Select(field => new
    {
        field.Key
    })

产品

"Fields": [
  {
    "Key": "field 1"
  },
  {
    "Key": "field 1"
  },
  {
    "Key": "field 2"
  }
]

如您所见,我有多个field 1,我想删除基于Key属性的重复项。我试图做GroupBy(),但它做了一些奇怪的事情。

的GroupBy()

Fields = user.Usergroups
    .SelectMany(x => x.UsergroupFields)
    .GroupBy(field => field.Key)
    .FirstOrDefault()
    .Select(field => new
    {
        field.Key
    })

结果

"Fields": [
  {
    "Key": "field 1"
  },
  {
    "Key": "field 1"
  }
]

似乎GroupBy()与我想要实现的完全相反。

1 个答案:

答案 0 :(得分:2)

Fields = user.Usergroups
             .SelectMany(x => x.UsergroupFields)
             .GroupBy(field => field.Key)
             .Select(g=>g.First());

GroupBy也有一个带有2个参数的重载,在这种情况下可以应用:

Fields = user.Usergroups
             .SelectMany(x => x.UsergroupFields)
             .GroupBy(field=>field.Key, (key, g)=>g.First());