我有简单的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()
,但它做了一些奇怪的事情。
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()与我想要实现的完全相反。
答案 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());