首页 > 解决方案 > 获取不同最大值的列表

问题描述

我有一堂TopRegion

public string Id { get; set; }
public string Name { get; set; }
public string Year { get; set; }
public decimal? ParticipationPercentage { get; set; }

以及 TopRegion 列表

IList<TopRegion> TopRegions = new List<TopRegion>();

该列表包含 200 多个 TopRegion,其中一些具有相同的年份和不同或相同的 ParticipationPercentage。总共有 14 个独特的年份,我想做的是为每一年填写一个顶级列表。因此,将 1950 年、1960 年、1970 年等年份 ParticipationPercentage 最高的 TopRegion 项放入此列表

IList<TopRegion> TopRegionsByYear = new List<TopRegion>();

解决此问题的最佳方法是什么?我认为它可能与 LINQ 相关,但我的 LINQ 技能对于此操作还不够敏锐

标签: c#listlinq

解决方案


您可以使用GroupByOrderByDescending

IList<TopRegion> TopRegionsByYear = TopRegions 
    .GroupBy(tr => tr.Year)
    .Select(yg => yg.OrderByDescending(tr => tr.ParticipationPercentage).First())
    .ToList()

顺便问一下,为什么是Year字符串而不是整数?你总是必须解析它,例如,如果你想按时间顺序排列上面的列表:

IList<TopRegion> TopRegionsByYear = TopRegions 
    .GroupBy(tr => tr.Year)
    .Select(yg => yg.OrderByDescending(tr => tr.ParticipationPercentage).First())
    .OrderBy(tr => int.Parse(tr.Year))
    .ToList()

推荐阅读