使用LINQ从另一个属性分组的List中删除除最高值之外的所有值

时间:2014-08-21 15:06:56

标签: c# linq

我有几个看起来像这样的类(简化为SO):

public class Result
{
    List<Review> Reviews { get; set; }
}

public class Review
{
    public string Name { get; set; }
    public string Amount { get; set; }
}

所以最终的结果是我们有一个&#34;结果&#34;具有List&lt;&gt;的对象Review对象,每个对象都有一个名称和一个数量。 &#34;姓名&#34;属性可以在此列表中重复一次或多次。

鉴于&#34;评论&#34;具有多个具有重复名称的Review对象的属性,我想使用LINQ删除&#34; Review&#34;列表中具有重复名称的对象具有最低值(换句话说,我想从列表中删除所有Review对象除了具有最高值的对象)。

所以,如果我的列表如下:

Name      Amount
----------------
A              2
B              3
C              1
A              1
B              4

我想在列表中使用LINQ Remove函数,以便我的最终结果是:

Name      Amount
----------------
A              2
C              1
B              4

有关如何使用LINQ执行此操作的任何建议?我也在寻找自己的解决方案,我想在这里发帖,看看它是否比我自己搞清楚要快。 :)

1 个答案:

答案 0 :(得分:4)

这是一种可以做到的方法:

var endResult = reviewList.OrderByDescending(e => e.Amount)
             .GroupBy(e => e.Name)
             .Select(g => g.First());