C# 使用LINQ从列表中获取第一条记录
我正在尝试从使用LINQ的产品列表中获得价格最高的产品C# 使用LINQ从列表中获取第一条记录,c#,linq,C#,Linq,我正在尝试从使用LINQ的产品列表中获得价格最高的产品 Product Name Product Category Product Price Mobile Electronics $300 Fridge Electronics $2500 chair Furniture $25 Table Furniture
Product Name Product Category Product Price
Mobile Electronics $300
Fridge Electronics $2500
chair Furniture $25
Table Furniture $80
Shirt Clothing $15
Pant Clothing $35
所需输出为
电子冰箱2500
我尝试在foreach中使用break,如下所示
如何在不使用break的情况下实现这一点
var highCost = from highPrice in listProduct
orderby highPrice.ProductPrice descending
select highPrice;
foreach(var item in highCost) {
Console.WriteLine("{0} {1} {2}", item.ProductCategory,
item.ProductName, item.ProductPrice);
break;
}
看起来,您使用了
First
或First或default
一些错误的方法
这应该可以做到:
var item = listProduct.OrderByDescending(e => e.ProductPrice).FirstOrDefault();
if (item != null)
{
Console.WriteLine("{0} {1} {2}", item.ProductCategory,
item.ProductName, item.ProductPrice);
}
或者在查询语法中,如果您愿意:
var item = (from highPrice in listProduct
orderby highPrice.ProductPrice descending
select highPrice).FirstOrDefault();
下面是一个产品类
class Product
{
public int ID{set;get;}
public string Name { set; get; }
public string Category { set; get; }
public string PriceDollar { set; get; }
}
代码用三个记录来填充列表,以便您清楚地理解,例如
List<Product> list = new List<Product>();
Product p1 = new Product();
p1.ID = 1;
p1.Name = "Mobile";
p1.Category = "Electronics";
p1.PriceDollar = "200";
Product p2 = new Product();
p2.ID = 2;
p2.Name = "Mobile";
p2.Category = "Electronics";
p2.PriceDollar = "400";
Product p3 = new Product();
p3.ID = 3;
p3.Name = "Chair";
p3.Category = "Furniture";
p3.PriceDollar = "100";
list.Add(p1);
list.Add(p2);
list.Add(p3);
下面的代码将用于从显示结果为400的产品列表中获取最高价格
var maxPrice = list.Max(p=>p.PriceDollar);
MessageBox.Show(maxPrice);
您可以使用一种稍微不同的方法,该方法具有更好的O(N)运行时:
LINQ方法OrderByDescending使用的是运行时O(N*logN)较差的
快速排序算法。item.ProductPrice.GetType()的值是多少?在循环的第一次迭代中?@mjwills的decimalPlease替换foreach(高成本中的var-item){Console.WriteLine({0}{1}{2}),item.ProductCategory,item.ProductName,item.ProductPrice);break;}
替换为var-bob=highCost.FirstOrDefault();if(bob!=null)Console.WriteLine(“{0}{1}{2}”、item.ProductCategory、item.ProductName、item.ProductPrice)代码>@mjwills-这就成功了。谢谢你的帮助,谢谢。这确实是第一个或第一个默认的安置问题。我更正了代码,它正在工作。谢谢你的帮助!
var maxPrice = list.Max(p=>p.PriceDollar);
MessageBox.Show(maxPrice);
var productWithMaxPrice = listProduct.Aggregate((max, product) =>
max.ProductPrice >= product.ProductPrice ? max : product);