2012-04-03 87 views
3

我有一个C#中的对象列表。所有对象都包含属性code1和code2(以及其他属性)。将具有匹配属性的对象组合到列表中

实施例:

List -> object = id, name, code1, code2, hours, amount. 

有31倍可能的代码1的值。 有10个可能的code2值。

我需要组合在一起具有将被保存在一个父列表中的相同代码1和代码2的值(独特的组合)为自己列出的所有对象(让每个人名单以后可以遍历。)

+0

您是否尝试过使用LINQ过滤您的列表? 它通过Sql查询语法使List过滤变得容易。 – phadaphunk 2012-04-03 18:04:22

回答

9

听起来像是你想要的东西,如:

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); 
    } 
} 
+0

这正是我所需要的。感谢您的解决方案和示例迭代。 – Baxter 2012-04-03 18:11:18

+0

它会像我将它转换为新对象一样工作=> list.GroupedBy(x => new TempObject {x.code1,x.code2}); – cpoDesign 2014-03-19 15:27:46

4

可枚举扩展是你的朋友(是*你的朋友:)

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。这不是一本字典,但可以类似地使用。

+2

使用'list.ToLookup(x => new {item.code1,item.code2})':)会更简单:) :) – 2012-04-03 18:14:33

+1

感谢您帮助我一个人...... :) – payo 2012-04-03 18:15:23

相关问题