2012-01-14 251 views
0

我有一個對象,它具有屬性ID,brandID,brandName,NumPages和Type。使用lambda篩選列表

我需要顯示前5個品牌被numPage大小,一個品牌可能有多個ID,所以我需要按品牌

listing.OrderByDescending(o => o.numPage).GroupBy(o=> o.brandName).Take(5).ToList(); 

是孤獨的什麼即時尋找的線條,但這不是有效的代碼。

+0

爲什麼它沒有被有效?你是否收到錯誤信息或者沒有得到想要的結果。 – 2012-01-14 00:18:30

回答

2

這聽起來像一個給定的品牌名稱可能有幾個ID,並且你想要前5名品牌按numPage排序。是正確的

如果是的話請嘗試以下

var query = listing 
    .GroupBy(x => x.brandName) 
    .OrderByDescending(brands => brands.Sum(x => x.numPage)) 
    .Select(x => x.Key) 
    .Take(5); 

注:GroupBy操作後你現在繞過品牌的集合對象,而不是單一的。因此,要訂購numPage,我們需要對該組中的所有品牌對象進行求和。該.Select(x => x.Key)將選擇背出哪個組是基於

+0

'IGrouping'沒有'numPage'成員,所以不應該編譯。 – hvd 2012-01-14 00:23:26

+0

@ hvd我在Visual Studio中驗證了這個編譯。我的早期版本中有一個輸入錯誤,但當前輸入錯誤 – JaredPar 2012-01-14 00:24:12

+0

是的,我的評論是基於您確實修復過的'.OrderByDescending(x => x.numPage.Sum())'。 – hvd 2012-01-14 00:29:24

0

只是嘗試了全新的brandName和它的作品:

public class Listing 
{ 
    public int ID { get; set; } 
    public int BrandID { get; set; } 
    public string BrandName { get; set; } 
    public int NumPages { get; set; } 
    public Type Type { get; set; }  
} 

這裏過濾

Listing listing1 = new Listing() { NumPages = 2, BrandName = "xx" }; 
Listing listing2 = new Listing() { NumPages = 2, BrandName = "xx" }; 
Listing listing3 = new Listing() { NumPages = 2, BrandName = "xx" }; 
Listing listing4 = new Listing() { NumPages = 3, BrandName = "xxxxx" }; 

List<Listing> allListings = new List<Listing>() { listing1, listing2, listing3, listing4 }; 

var result = allListings.OrderByDescending(x => x.NumPages).GroupBy(x => x.BrandName).Take(5);