C#LINQ:获取最高价格的商品

我有一个我的对象列表:
class MyObj
{
    public String Title { get; set; }
    public Decimal Price { get; set; }
    public String OtherData { get; set; }
}

var list = new List<MyObj> {
 new MyObj { Title = "AAA",Price = 20,OtherData = "Z1" },new MyObj { Title = "BBB",OtherData = "Z2" },new MyObj { Title = "AAA",Price = 30,OtherData = "Z5" },Price = 10,OtherData = "Z10" },new MyObj { Title = "CCC",Price = 99,OtherData = "ZZ" }
};

获得具有唯一Title和MAX(价格)的列表的最佳方法是什么.
结果列表需要是:

var ret = new List<MyObj> {
 new MyObj { Title = "BBB",OtherData = "ZZ" }
};

解决方法

好吧,你可以这样做:
var query = list.GroupBy(x => x.Title)
                .Select(group =>
                {
                    decimal maxPrice = group.Max(x => x.Price);
                    return group.Where(x => x.Price == maxPrice)
                                .First();
                };

如果你需要LINQ to sql(你不能使用语句lambdas),你可以使用:

var query = list.GroupBy(x => x.Title)
       .Select(group => group.Where(x => x.Price == group.Max(y => y.Price))
                             .First());

请注意,在LINQ to Objects中,效率会低于Where的每次迭代,它会重新计算最高价格.

如果您希望能够返回具有给定名称的多个项目(如果它们具有相同的价格),请调整.First()部分.

在LINQ to Objects中,您还可以使用MoreLINQMaxBy方法

var query = list.GroupBy(x => x.Title)
                .Select(group => group.MaxBy(x => x.Price));

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...