使用Lambda Comparer交叉匿名类型

时间:2014-02-11 00:02:34

标签: c# linq lambda

我想通过比较一个属性来对两个匿名类型数组执行交叉。集合是具有两个属性Id和Name的任意类型的数组。例如,给定集合一:

{ 1, "Bob",
  2, "Jane",
  3, "Fred" }

和第二集:

{ 2, "",
  3, "",
  4, "" }

是否可以编写一个Intesect语句来根据Id获取交集并获取非空白的名称,因此结果将是

{ 2, "Jane",
  3, "Fred" }

现在我有

var data = one.Intersect(two, (x, y) => x.Id == y.Id).ToArray();

但我不知道如何处理名称解析或如何使用lambda进行比较

1 个答案:

答案 0 :(得分:5)

我认为您可以使用Join ...

来实现您的目标
var data = one.Join(two,
                    a => a.Id,
                    b => b.Id,
                    (a, b) => new
                    {
                        Id = a.Id,
                        Name = string.IsNullOrEmpty(a.Name) ? b.Name : a.Name
                    }).ToArray();

小提琴:http://dotnetfiddle.net/zHUE3n