Linq GroupBy实现分组内取最大Type对应最大Model的问题及修复方案
嘿,这个问题我熟!你想要的是每个品牌(maker)下,先找到最大的车型类型(type),再在这个类型里挑出型号(model)最大的那一个对吧?
先说说你之前的问题:第二次嵌套GroupBy后,返回的是每个品牌下按type分组的集合,而不是每个品牌对应的单个目标元素,所以结果不符合预期。下面给你两种简洁的解决办法:
方法一:多重排序直接取首元素
最直观的方式就是在每个品牌的分组里,先按type降序排,type相同的再按model降序排,然后取第一个元素就行:
var results = list .GroupBy(x => x.maker) .Select(g => g.OrderByDescending(e => e.type) .ThenByDescending(e => e.model) .First()) .ToList();
方法二:先找最大type再筛选
如果不想做全量排序(数据量大的时候性能可能更优),可以先拿到分组里的最大type值,再筛选出所有等于这个type的元素,最后取其中model最大的:
var results = list .GroupBy(x => x.maker) .Select(g => { int maxType = g.Max(e => e.type); return g.Where(e => e.type == maxType) .OrderByDescending(e => e.model) .First(); }) .ToList();
两种方法跑出来的结果都是你要的预期值:
{ maker = Volvo, type = 8, model = 100 } { maker = GM, type = 9, model = 50 }
内容的提问来源于stack exchange,提问作者Syntax_MM
相关产品推荐
相关产品推荐

