使用LINQ将两个类合并到一个Dictionary中

时间:2012-07-25 17:44:51

标签: c# linq list dictionary

我有两个共享两个共同属性的类,Id和Information。

public class Foo
{
     public Guid Id { get; set; }

     public string Information { get; set; }

     ...
}
public class Bar
{
     public Guid Id { get; set; }

     public string Information { get; set; }

     ...
}

使用LINQ,我如何获取填充的Foo对象列表和填充的Bar对象列表:

var list1 = new List<Foo>();
var list2 = new List<Bar>();

将每个的ID和信息合并到一个字典中:

var finalList = new Dictionary<Guid, string>();

提前谢谢。

2 个答案:

答案 0 :(得分:8)

听起来你可以做到:

// Project both lists (lazily) to a common anonymous type
var anon1 = list1.Select(foo => new { foo.Id, foo.Information });
var anon2 = list2.Select(bar => new { bar.Id, bar.Information });

var map = anon1.Concat(anon2).ToDictionary(x => x.Id, x => x.Information);

(你可以在一个声明中完成所有这些,但我认为这样更清楚。)

答案 1 :(得分:0)

   var finalList = list1.ToDictionary(x => x.Id, y => y.Information)
            .Union(list2.ToDictionary(x => x.Id, y => y.Information))
                        .ToDictionary(x => x.Key, y => y.Value);

确保ID是唯一的。如果不是,它们将被第一本字典覆盖。

编辑:添加.ToDictionary(x =&gt; x.Key,y =&gt; y.Value);