如何使用LINQ GroupBy查询集合中出现次数最多的status值
问题根因
你原有代码存在逻辑错误:分组后没有统计每个status的出现频次,反而对分组内的status值做排序,和「找出现次数最多的status」的需求完全不匹配。
正确简洁实现
直接分组后按分组元素数量倒序,取首位分组的Key即可:
var mostFrequentStatus = listTest .GroupBy(x => x.status) .OrderByDescending(group => group.Count()) .First() .Key;
如果需要兼容空集合的场景,可增加空安全处理:
// 空集合时返回int默认值0,可按需调整默认值 var mostFrequentStatus = listTest .GroupBy(x => x.status) .OrderByDescending(group => group.Count()) .FirstOrDefault()? .Key ?? default;
逻辑说明
GroupBy(x => x.status):将所有元素按status值分组,每个分组的Key为对应的status值,调用分组的Count()方法即可得到该status的出现次数OrderByDescending(group => group.Count()):按各status的出现次数从高到低排序所有分组- 取排序后的第一个分组的Key,就是出现次数最多的status值
内容的提问来源于stack exchange,提问作者Michael T
相关产品推荐
相关产品推荐

