Cod*_*r23 6 c# linq performance
我有这样的产品表: -
ProductID ProductName Price
1 Milk 10
2 Banana 20
3 Apple 15
1 Grapes 12
2 Banana 25
1 Milk 8
Run Code Online (Sandbox Code Playgroud)
我想找到每个productId最高价的产品.
样本输出: -
ProductID ProductName Price
1 Grapes 12
2 Banana 25
3 Apple 15
Run Code Online (Sandbox Code Playgroud)
我试过这个查询: -
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();
Run Code Online (Sandbox Code Playgroud)
这个查询工作正常,但我的问题是我应该使用OrderByDescending两次?我的意思是因为我只想要基于1个属性的单项并假设有多个其他属性,所以我需要一次又一次地使用相同的逻辑吗?
编辑: 原谅我忘了提,请假设ProductName可以不同,请检查更新的表格.
不,你不必,你可以选择First():
new Product
{
ProductId = p.Key,
Name = p.First().Name,
Bar = p.First().Bar,
Price = p.OrderByDescending(o => o.Price).First().Price,
}
Run Code Online (Sandbox Code Playgroud)
这当然假设所有具有给定的产品具有ProductId相同的Name和Bar.
如果不是这种情况,并且您想要映射所选实体的所有属性,请在以下位置创建代码块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,
}
})
Run Code Online (Sandbox Code Playgroud)