2011-08-02 91 views
0

我應該如何構建一個Linq查詢以返回我的db中最受歡迎標籤(我正在使用EF4.1)的List或Ienumerable。使用Linq查找n最受歡迎

目前我有:

var tagsListing = db.Tags 
          .GroupBy(q => q.Name) 
           .OrderByDescending(gp => gp.Count()) 
           .Take(5) 
           .Select(); 

我覺得我的存在方式的一部分,但我不確定如何構建Select語句...

回答

1

假設你想要的名稱和數量,只是:

.Select(g => new { Name = g.Key, Count = g.Count() }); 

編輯:如果你想完整的標籤爲好,你使用:

.Select(g => new { Tags = g, Count = g.Count() }) 

這將使你的一組羣組的標籤,都在一個羣組中具有相同的名稱。或者,您可能只需要每個組中的第一個標籤,例如

.Select(g => g.First()) 

目前尚不清楚,一個標籤所包含的內容,或正是要在結果是什麼。

+0

怎麼樣,如果我沒有想返回匿名類型,但實際的標籤。 – Judo

+0

@Judo:那麼只需'.Select(g => g.Key)'就可以正常工作。 –

+0

看起來它只是選擇字符串而不是整個Tag對象。它返回一個IQueryable ,理想情況下我想返回Ienumerable 。 – Judo

2

Select調用可能看起來像這樣:

.Select(gp => gp.Key) 

這會給你最熱門的標籤的IEnumerable<string>(假設Namestring)。

0

你可能想選擇這樣的名字:

.Select(gp => gp.Key); 
1

你寫一個完全可行的查詢,不需要調用.Select

IQueryable<IGrouping<string, Tag>> tagsListing = db.Tags 
    .GroupBy(q => q.Name) 
    .OrderByDescending(gp => gp.Count()) 
    .Take(5); 

List<IGrouping<string, Tag>> results = tagListing.ToList();