1

User複数にすることができ、複数Usergroupにすることができる単純なEAVっぽいシナリオがあり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() は、私が達成したいこととは正反対のことをしているようです。

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 に答える