[c#]我应该使用 OrderByDescending 在 LINQ 中两次吗?

标签: Linq C#
发布时间: 2017/2/28 21:23:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这样的产品表:-

ProductID     ProductName     Price
   1            Milk           10
   2            Banana         20
   3            Apple          15
   1            Grapes         12
   2            Banana         25
   1             Milk          8

我想要查找的产品有最高价格为每个产品 id。

示例输出:-

    ProductID     ProductName     Price
       1            Grapes          12
       2            Banana         25
       3            Apple          15

我用过此查询:-

List<Product> groups = products
    .GroupBy(p => p.ProductId)
    .Select(p => new Product
        {
            ProductId = p.Key,
            Name = p.OrderByDescending(o => o.Price).First().Name,
            Price = p.OrderByDescending(o => o.Price).First().Price,
        })
    .ToList();

此查询做工精细,但我的问题是,我应该使用 OrderByDescending 两次吗?我的意思是因为我只是想基于 1 的属性的单个项目和假设有多个其他属性,所以我做还需要再次使用相同的逻辑吗?

编辑︰ 请原谅我忘了提到,请假定产品名称可以是不同的请检查更新的表。

解决方法 1:

不,你可以不去,你只需选择 First() :

new Product
{
    ProductId = p.Key,
    Name = p.First().Name,
    Bar = p.First().Bar,
    Price = p.OrderByDescending(o => o.Price).First().Price,
}

这当然是假设所有产品具有给定 ProductId 具有相同的 NameBar

如果情况并非如此,您想要从所选实体的所有属性都映射,创建一个代码块在你 Select() :

.Select(p => 
{   
    var havingHighestPrice = p.OrderByDescending(o => o.Price).First()

    return new Product
    {
      ProductId = p.Key,
      Name = havingHighestPrice.Name,
      Bar = havingHighestPrice.Bar,
      Price = havingHighestPrice.Price,
    }
})
官方微信
官方QQ群
31647020