Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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#从每个地区选择前2名产品详细信息_C#_Linq - Fatal编程技术网

C#从每个地区选择前2名产品详细信息

C#从每个地区选择前2名产品详细信息,c#,linq,C#,Linq,从给定的产品列表中 List<Product> productList = new List<Product>(); productList.Add(new Product("P001", 34566.78M, "North")); productList.Add(new Product("P004", 4566.78M, "East")); productList.Add(new Product("P007", 14566.78M, "South")); produc

从给定的产品列表中

List<Product> productList = new List<Product>();
productList.Add(new Product("P001", 34566.78M, "North"));
productList.Add(new Product("P004", 4566.78M, "East"));
productList.Add(new Product("P007", 14566.78M, "South"));

productList.Add(new Product("P010", 2456.178M, "South"));
productList.Add(new Product("P011", 341566.78M, "North"));
productList.Add(new Product("P006", 64566.878M, "East"));

productList.Add(new Product("P00188", 664566.78M, "East"));
productList.Add(new Product("P00111", 3444566.78M, "North"));
productList.Add(new Product("P00134", 3234566.78M, "South"));

首先按区域分组,然后在每个组中执行OrderBy/Take。例如:

var query = productList
   .GroupBy(r => r.Region)
   .Select(group => new { Region = group.Key,
                          Orders = group.OrderByDescending(p => p.ProductPrice)
                                        .Take(2) });

它不漂亮,可读性也不太好,但如果你必须用一句话来表达,这会帮你解决问题

var q = productList.Select(pl => pl.Region)
                .Distinct()
                .ToList()
                .SelectMany(region => productList.Where(pl => pl.Region == region)
                                                 .OrderByDescending(pl => pl.ProductPrice)
                                                 .Take(2));

不过,我建议将其拆分以便于阅读。

乔恩·斯基特总是在那里等待救援!:)
var q = productList.Select(pl => pl.Region)
                .Distinct()
                .ToList()
                .SelectMany(region => productList.Where(pl => pl.Region == region)
                                                 .OrderByDescending(pl => pl.ProductPrice)
                                                 .Take(2));