使用LINQ从由另一个属性分组的列表中删除除最高值以外的所有值

本文关键字:最高值 删除 列表 LINQ 另一个 属性 使用 | 更新日期: 2023-09-27 18:19:03

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

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

所以最终的结果是我们有一个"result"对象,它有一个List<>的Review对象,每个对象都有一个名称和一个数量。"Name"属性可以在此列表中重复一次或多次。

给定一个"Reviews"属性,它有几个具有重复名称的Review对象,我想使用LINQ从具有最低值的列表中删除具有重复名称的"Review"对象(换句话说,我想从列表中删除除具有最高值的对象外的所有Review对象)。

如果我的列表是这样的:

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

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

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

关于如何使用LINQ做到这一点有什么建议吗?我也在寻找自己的解决方案,只是想在这里发帖看看是否比我自己解决更快。:)

使用LINQ从由另一个属性分组的列表中删除除最高值以外的所有值

你可以这样做:

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