开发者

C# Selection of Top 2 product details from each region

开发者 https://www.devze.com 2022-12-13 14:00 出处:网络
Fromthe given Product List List<Product> productList = new List<Product>(); productList.Add(new Product(\"P001\", 34566.78M, \"North\"));

From the given Product List

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, "Nort开发者_StackOverflowh"));
productList.Add(new Product("P00134", 3234566.78M, "South"));

How to select Top 2 Product (price based) from each region ?

I have written something like

var query = productList.OrderByDescending(p => p.ProductPrice).
 Take(2).GroupBy(r => r.Region);


Group by region first, then within each group do the OrderBy/Take. For example:

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


It's not pretty and not terribly readable, but if you must do it in one statement, this will do the trick for you,

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

I'd recommend breaking it up for readability though.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号