我在C#中有一个对象列表。所有对象都包含属性code1和code2(以及其他属性)。
示例:
List -> object = id, name, code1, code2, hours, amount.
有31个可能的code1值。 有10个可能的code2值。
我需要将具有相同code1和code2值(唯一组合)的所有对象组合到它们自己的列表中,这些列表将保存在父列表中(以便以后可以迭代每个列表。)
答案 0 :(得分:11)
听起来像你想要的东西:
var groups = list.GroupBy(x => new { x.code1, x.code2 });
// Example of iterating...
foreach (var group in groups)
{
Console.WriteLine("{0} / {1}:", group.Key.code1, group.Key.code2);
foreach (var item in group)
{
Console.WriteLine(" {0} ({1})", item.id, item.name);
}
}
答案 1 :(得分:4)
可以使用的扩展名是你的朋友(是*你的朋友?:)
var groups = lists.GroupBy(item => new { item.code1, item.code2 });
而......传说中的Skeet在我之前发布了帖子,SHAME!
时间到一个Skeet(哈,右)。您还可以将常用项目分组到字典中。
var mapping = list
.GroupBy(item => new { item.code1, item.code2 })
.ToDictionary(g => g.Key, g => g.ToList());
现在,映射是Dictionary<anon{code1, code2}, List<YourObject>>
。当然你可以从ToList中取出值,字典的值类型是一个IGrouping,它是一个IEnumerable。
您也可以使用ToLookup
var lookup = list.ToLookup(item => new { item.code1, item.code2 });
结果是一个ILookup,它具有给定的键类型的键,并且是所使用的列表类型的IEnumerable。它不是字典,但可以类似地使用。