2

我有一个包含字段 UserID、Property 的对象列表:

我想按大多数共享属性值对列表进行排序。因此,如果每个用户都有 Property="Popular",那应该首先出现。如果除了一个用户之外的每个人都有 Property="Second" 应该在列表中排在第二位......即使每个用户只使用一次。

我会在每个可能的属性上做 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 回答