如何在许多列表中拆分组的元素?
问题描述:
我有一个类型为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();
它不工作,因为一组元素不是列表。我想知道如何访问每个分组,并转换为列表。
非常感谢。
答
List<List<MyType>> myResultList =
myOriginalList.GroupBy(x=>x.IDReferenceElement)
.Select(gr=>gr.ToList()) // convert each group into List
.ToList();
答
另一种方法是使用查找
var myResultsLookup = myOriginalList.ToLookup(myType => myType.IDReferenceElement);
现在可以使用IDReferenceElement值作为关键
var results = myResultsLookup[1];
使用您的测试数据结果被访问的数据的每个子集将包含元素(1,1,“1”),(1,2,“2”)和(1,3,“3”)
重复: - http://stackoverflow.com/questions/2697253/using-linq-to-group-a-list-of-objects-into-a-new-grouped-list-of-list-of-objects – user3517179