Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ从列表中获取第一条记录_C#_Linq - Fatal编程技术网

C# 使用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

我正在尝试从使用LINQ的产品列表中获得价格最高的产品

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);