我有一个包含字段 UserID、Property 的对象列表:
我想按大多数共享属性值对列表进行排序。因此,如果每个用户都有 Property="Popular",那应该首先出现。如果除了一个用户之外的每个人都有 Property="Second" 应该在列表中排在第二位......即使每个用户只使用一次。
我会在每个可能的属性上做 distinct() ,但是对于许多可能的属性来说这似乎并不有效。
您可以在 上使用分组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();