2015-05-14 42 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”)