1

我有简单的 EAV'ish 场景,其中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()但它正在做一些奇怪的事情。

通过...分组()

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() 似乎与我想要实现的目标完全相反。

4

1 回答 1

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());
于 2013-08-28T12:47:12.593 回答