2

フィールド UserID、Property を持つオブジェクトのリストがあります。

最も共有されているプロパティ値でリストを並べ替えたいと思います。したがって、すべてのユーザーが Property= "Popular" を持っている場合、それが最初に表示されます。1 人のユーザーを除く全員が Property="Second" を持っている場合、それはリストの 2 番目に表示されるはずです...ユーザーごとに 1 回しか使用されない場合でも。

可能な各プロパティに対してdistinct()を実行しますが、多くの可能なプロパティでは効率的ではないようです。

4

1 に答える 1

2

でグループ化を使用しProperty、各グループのカウント数でグループを並べ替えてから、次を使用してリストを再び平坦化できSelectMany()ます。

var items = myList.GroupBy(x => x.Property)
                  .OrderByDescending(g => g.Count())
                  .SelectMany(g => g);
                  .ToList();

あなたの質問から、重複を表示するかどうか、およびUserID. そうでない場合は、グループのキーを選択してList<string>、一意のプロパティ値を目的の順序で指定できます。

var props = myList.GroupBy(x => x.Property)
                  .OrderByDescending(g => g.Count())
                  .Select(g => g.Key);
                  .ToList();

編集:

これは、実際に探しているもののように思えます。グループは、特定のプロパティを持つ一意のユーザーの数によって並べ替えられます。

var props = myList.GroupBy(x => x.Property)
                  .OrderByDescending(g => g.Select(x=> x.UserID)
                                           .Distinct()
                                           .Count())
                  .Select(g => g.Key);
                  .ToList();
于 2012-04-22T22:01:01.237 に答える