Linq通过比较选择不同的值

tim*_*tim 3 linq

我有一个对象列表.例如List<coin>,它们包含字符串(denom)和int(年份).如果列表包含:

"Quarter", 1954
"Quarter", 1990
"Penny", 1925  
"Nickel", 1900 
"Nickel", 2000
Run Code Online (Sandbox Code Playgroud)

如何获得一个结果列表,其中包含最近一年的唯一值?例如:

"Quarter", 1990
"Penny", 1925
"Nickel", 2000
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

您可以通过按名称分组,然后排序和获取第一个结果,或使用MaxBy来自MoreLINQ的内容来执行此操作:

var query = coins.GroupBy(x => x.Name)
                 .Select(g => g.MaxBy(x => x.Year));
Run Code Online (Sandbox Code Playgroud)

要么

var query = coins.GroupBy(x => x.Name)
                 .Select(g => g.OrderByDescending(x => x.Year).First());
Run Code Online (Sandbox Code Playgroud)