You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ获取包含重复值的前N个最高值对应全部数据?

获取所有拥有前3个最高值的城市的LINQ实现

当城市列表存在重复高值时,需要返回所有属于前3个最高值的城市(而非仅取排序后的前3条数据),可以通过以下方式实现:

方案1:分步实现(可读性&效率更优)

  1. 先提取列表中前3个不同的最高值并缓存
  2. 筛选出所有值属于该集合的城市,再按值降序排序
// 提取前3个不同的最高值
var top3DistinctValues = MyList
    .Select(city => city.Value)
    .Distinct()
    .OrderByDescending(val => val)
    .Take(3)
    .ToList();

// 筛选并排序结果
var result = MyList
    .Where(city => top3DistinctValues.Contains(city.Value))
    .OrderByDescending(city => city.Value)
    .ToList();

方案2:合并为单查询

如果偏好简洁的链式写法,可将逻辑合并为一个查询:

var result = MyList
    .Where(city => MyList
        .Select(x => x.Value)
        .Distinct()
        .OrderByDescending(val => val)
        .Take(3)
        .Contains(city.Value))
    .OrderByDescending(city => city.Value)
    .ToList();

结果验证

针对示例中的第二个列表,上述代码会返回所有值为60、50、40的城市,最终结果符合预期:

City            Value
--------------------- 
City6             60
City7             60
City5             50
City4             40

(注:若需保持原列表中同值城市的顺序,可在排序时追加ThenBy(city => MyList.IndexOf(city)))

内容的提问来源于stack exchange,提问作者DooDoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:28:09