2013-03-21 73 views
4

我有一個問題,我無法環繞我的頭。添加項目數量到LINQ選擇

我有一個SharePoint項目的列表,其中有類別。我想閱讀所有類別,並計算它們發生的頻率。

在另一種方法中,我想採用categoryCount,將它除以票證總數並乘以100得到一個百分比。

問題是伯爵。

這是我的查詢到目前爲止:

public IEnumerable<KategorieVM> GetAllCategories() 
{ 
int counter = 0; 
var result = (from t in Tickets 
where t.Kategorie != Kategorie.Invalid && t.Kategorie != Kategorie.None && t.Kategorie != null 
select new KategorieVM() { _name = t.Kategorie.ToString(), _val = counter++ }); 


return result; 
} 

的問題是,我不能使用計數器++。有沒有一個乾淨的解決方法?爲計算每個類別而構建查詢的選項不是有效的選項。該清單擁有15000個Listitems並不斷增長。最後,我需要遍歷每個類別,並調用查詢來計算大約需要3分鐘的門票。 因此,在一個查詢中計算cateogry是強制性的。

任何幫助,高度讚賞。

/編輯:爲了清晰起見: 計數器++作爲計數只是一個brainfart - 我不知道爲什麼我試過它;這會產生一個索引。我需要一種方法來計算這些15k條目中出現「類別」的頻率。

+0

請,作出明確你想要得到的每一個項目有它的位置,或者序列的計數? – 2013-03-21 15:39:40

回答

4

您可以使用GroupBy執行查詢本身內的Count

return Tickets 
      .Where(t => t.Kategorie != Kategorie.Invalid && t.Kategorie != Kategorie.None && t.Kategorie != null) 
      .GroupBy(t => t.Kategorie.ToString()) 
      .Select(g => new KategorieVM() { _name = g.Key, _val = g.Count() }); 
+0

我不知道GroupBy的伎倆。 +1作品! – Marco 2013-03-21 15:47:17

+0

@Serv是 - 如果你想計數,你需要「分組」項目。在這種情況下'GroupBy'是合適的方法。 – 2013-03-21 15:48:34

+0

+1然後,對不起,我誤解了OP的任務。 – 2013-03-21 15:50:51