2013-08-28 28 views
1

我有简单的EAV'ish场景,其中User可以在多个UsergroupUsergroup可以有多个Field。我选择用户,选择他的所有用户组,然后显示字段。GroupBy - 这是预期的行为吗?

问题是我不想显示带有重复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": [ 
    { 
    "Key": "field 1" 
    }, 
    { 
    "Key": "field 1" 
    } 
] 

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

结果似乎的GroupBy()是做什么我要实现完全相反。

+2

你把第一组* *不每个组中的第一项。 '的GroupBy(...)。选择(X => x.First()' – I4V

回答

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()); 
相关问题