我有一个C#中的对象列表。所有对象都包含属性code1和code2(以及其他属性)。将具有匹配属性的对象组合到列表中
实施例:
List -> object = id, name, code1, code2, hours, amount.
有31倍可能的代码1的值。 有10个可能的code2值。
我需要组合在一起具有将被保存在一个父列表中的相同代码1和代码2的值(独特的组合)为自己列出的所有对象(让每个人名单以后可以遍历。)
我有一个C#中的对象列表。所有对象都包含属性code1和code2(以及其他属性)。将具有匹配属性的对象组合到列表中
实施例:
List -> object = id, name, code1, code2, hours, amount.
有31倍可能的代码1的值。 有10个可能的code2值。
我需要组合在一起具有将被保存在一个父列表中的相同代码1和代码2的值(独特的组合)为自己列出的所有对象(让每个人名单以后可以遍历。)
听起来像是你想要的东西,如:
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);
}
}
可枚举扩展是你的朋友(是*你的朋友:)
var groups = lists.GroupBy(item => new { item.code1, item.code2 });
而且....信用证?在我做之前,Egendary 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。这不是一本字典,但可以类似地使用。
使用'list.ToLookup(x => new {item.code1,item.code2})':)会更简单:) :) – 2012-04-03 18:14:33
感谢您帮助我一个人...... :) – payo 2012-04-03 18:15:23
您是否尝试过使用LINQ过滤您的列表? 它通过Sql查询语法使List过滤变得容易。 – phadaphunk 2012-04-03 18:04:22