2009-12-02 69 views
2

前2產品細節從給定的產品列表的每個區域

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

C#的選擇如何選擇每個區域頂部2產品(價格爲基礎)?

我已經寫了類似

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

回答

8

組由區第一,那麼每個組內做的OrderBy /送。例如:

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

喬恩的雙肩總是在那裏救援! :) – user158977 2009-12-02 19:23:40

0

這不是漂亮,不是非常可讀的,但如果你必須在一個聲明中做到這一點,這將做的伎倆你,

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

我建議你打破它了爲了可讀性。

相關問題