2011-01-26 70 views
88

「值」屬性我有這樣獲取IGrouping

public DespatchGroup(DateTime despatchDate, List<Products> products); 

,我試圖做一個數據結構...

var list = new List<DespatchGroup>(); 

foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate)) 
{ 
    // group.Values is not correct... how do I write this? 
    list.Add(new DespatchGroup(group.Key, group.Values); 
} 

我顯然不理解IGrouping,我可以」看看如何實際到達組內的數據記錄!

+1

編輯[(轉2)](http://stackoverflow.com/revisions/4804477/2),因爲它不不是非常有建設性匹配任何答案。 – 2014-05-14 17:30:22

回答

112

集團實現IEnumerable<T> - 在一般情況下,只需要調用foreachgroup。在此情況下,因爲你需要一個List<T>

list.Add(new DespatchGroup(group.Key, group.ToList()); 
+0

所以基本上,如果我們遵循問題的本質,「值」與「ToList()」相當,那麼只有更多的開銷將其轉換爲列表,而不是僅僅提取一個值 – Coops 2014-12-17 15:25:20

+1

@CodeBlend還有更多因爲他們想要一個清單。如果有他們想象的`Values`屬性,那麼他們必須執行`group.Values.ToList()`。相反,如果他們接受任何枚舉而不是列表,那麼`新的DespatchGroup(group.Key,group)`將起作用。開銷來自「DespachGroup」的定義,而不是IGrouping的工作方式。 – 2015-06-19 10:18:25

24

有沒有Values財產或類似的,因爲IGrouping<T>本身IEnumerable<T>序列。所有你需要在這種情況下,做的是序列轉換到一個列表:

list.Add(new DespatchGroup(group.Key, group.ToList()); 
12

只是一個相關的提示 - 因爲,正如其他的答案說,分組是一個IEnumerable,如果你需要訪問特定索引你可以使用group.ElementAt(i)

這對很多人來說可能是顯而易見的,但希望它能幫助一些人!

1

對於任何選定的組,你可以調用

var selectedGroupValues=selectedGroup.SelectMany(x=>x);