LINQ返回最大重复项,但反向排序

时间:2018-09-27 12:35:26

标签: c# linq

我有一个包含名称的字符串数组:

[Alex, Alex, Michael, Michael, Dave, Victor]

我转换为List<string>

然后,我需要编写一个函数,该函数返回列表中的最大重复项,但应按降序排序,在这种情况下为Michael。

我遵循了link中所述的LINQ代码。就是

string maxRepeated = prod.GroupBy(s => s)
                     .OrderByDescending(s => s.Count())
                     .First().Key;

但是,代码返回的是Alex而不是Michael。

我尝试添加另一个OrderByDescending,但是它返回了Victor。

string maxRepeated = prod.GroupBy(s => s)
                     .OrderByDescending(s => s.Count())
                     .OrderByDescending(b => b)
                     .First().Key;

我被困住了,不知道需要添加什么才能达到预期的效果。

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

第二个OrderByDescending不会忽略先前的顺序,而是ThenByDescending

string maxRepeated = prod.GroupBy(s => s)
                     .OrderByDescending(g => g.Count())
                     .ThenByDescending(g => g.Key)
                     .First().Key;

答案 1 :(得分:1)

您可能需要在“ GroupBy”之后添加一个条件,以将其限制为具有多个项目的组。这基本上等同于SQL中的“具有”。我认为这可以满足您的要求:

prod.GroupBy(s => s)
    .Where(group => group.Count() > 1)
    .Select(group => group.Key)
    .OrderByDescending(s => s)
    .First();