【发布时间】:2019-10-06 06:03:23
【问题描述】:
我正在尝试使用查询语法来遍历对象列表并选择其 UnitPrice 属性中具有最低 int 的对象。
var lowPrice = from l in DataLoader.LoadProducts()
group l by l.Category into newGroup
select new
{
cat = newGroup.Key,
lowest = from p in newGroup
where p.UnitPrice < p.UnitPrice
select p
};
上面的代码应该在 UnitPrice 属性中选择一个具有最低值的对象并将其存储到最低属性中。
但我不知道选择具有最低单价的对象的正确语法。
这是我的产品对象的示例。有很多相同类别的产品。我的目标是显示类别名称和该类别下具有最低单价的产品。我认为总共有 6 个类别。
new Product
{
ProductID = 1,
ProductName = "Chai",
Category = "Beverages",
UnitPrice = 18.0000M,
UnitsInStock = 39
},
new Product
{
ProductID = 2,
ProductName = "Chang",
Category = "Beverages",
UnitPrice = 19.0000M,
UnitsInStock = 17
},
new Product
{
ProductID = 3,
ProductName = "Aniseed Syrup",
Category = "Condiments",
UnitPrice = 10.0000M,
UnitsInStock = 13
},
new Product
{
ProductID = 4,
ProductName = "Chef Anton's Cajun Seasoning",
Category = "Condiments",
UnitPrice = 22.0000M,
UnitsInStock = 53
},
【问题讨论】:
-
您是指每个类别的最低价格吗?如果你只想最低,试试这个,看看它是否有效:
(from l in DataLoader.LoadProducts() select l.UnitPrice).Min(); -
我正在考虑选择具有最低 UnitPrice 而不是价格本身的对象。
-
正常的做法是先按单价下单再做组。那么较低的价格将是该组中的 First() 项。
-
然后按单价下单,取
FirstOrDefault。听起来你不需要分组。 -
什么是
DataLoader.LoadProducts()?如果这是 LINQ to objects 或 LINQ to SQL 后端,这会产生很大的不同。无论哪种方式,您的问题都有很多重复项。