5

我在 C# 中有一个对象列表。所有对象都包含属性 code1 和 code2(以及其他属性)。

例子:

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

有 31 个可能的 code1 值。有 10 个可能的 code2 值。

我需要将具有相同 code1 和 code2 值(唯一组合)的所有对象组合到它们自己的列表中,这些列表将保存在父列表中(以便以后可以迭代每个单独的列表。)

4

2 回答 2

13

听起来你想要这样的东西:

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);
    }
}
于 2012-04-03T17:54:19.277 回答
4

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

var groups = lists.GroupBy(item => new { item.code1, item.code2 });

还有....传说中的飞碟在我之前的热门帖子,耻辱!

是时候做一个 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,它具有给定键 Type 的键,并且是使用的列表类型的 IEnumerable。它不是字典,但可以类似地使用。

于 2012-04-03T17:55:44.830 回答