2015-05-14 62 views
2

我有一個類型爲MyType的元素的列表(OriginalList)。我喜歡的類型是:如何在許多列表中拆分組的元素?

MyType 
{ 
    long IDReferenceElement; 
    long IDElement; 
    string value; 
} 

所以我想在列表中每個組的元素,其中每個組具有相同IDReferenceElement元素的分離。

例如,列表的列表中,主列表的每個列表都只有相同組的元素。

List<List<MyType>> 

一個例子,我有一個原始列表與該元素:

  • 項目1(1,1,1);
  • Item2(1,2,2);
  • Item3(1,3,3);
  • Item4(2,4,4);
  • 第5項(2,5,5);
  • 第6項(2,6,6);
  • Item7(3,7,7);
  • Item8(3,8,8);
  • Item9(3,9,9);

我想獲得三個列表:

列表1與項目: - 項目1(1,1,1); - Item2(1,2,2); - Item3(1,3,3);

List2: - Item4(2,4,4);項目5(2,5,5); - Item6(2,6,6);

List3: - Item7(3,7,7);項目8(3,8,8);項目9(3,9,9);

爲了得到它,我想這樣的事情:

List<List>> myResultList = myOriginalList.GroupBy(x=>x.IDReferenceElement).ToList(); 

它不工作,因爲一組元素不是列表。我想知道如何訪問每個分組,並轉換爲列表。

非常感謝。

+1

重複: - http://stackoverflow.com/questions/2697253/using-linq-to-group-a-list-of-objects-into-a-new-grouped-list-of-list-of-objects – user3517179

回答

3
List<List<MyType>> myResultList = 
     myOriginalList.GroupBy(x=>x.IDReferenceElement) 
        .Select(gr=>gr.ToList()) // convert each group into List 
        .ToList(); 
1

另一種方法是使用查找

var myResultsLookup = myOriginalList.ToLookup(myType => myType.IDReferenceElement); 

現在可以使用IDReferenceElement值作爲關鍵

var results = myResultsLookup[1]; 

使用您的測試數據結果被訪問的數據的每個子集將包含元素(1,1,「1」),(1,2,「2」)和(1,3,「3」)