使用Lambda Comparer交叉匿名类型

reg*_*tar 0 c# linq lambda

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

{ 1, "Bob",
  2, "Jane",
  3, "Fred" }
Run Code Online (Sandbox Code Playgroud)

和收集二:

{ 2, "",
  3, "",
  4, "" }
Run Code Online (Sandbox Code Playgroud)

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

{ 2, "Jane",
  3, "Fred" }
Run Code Online (Sandbox Code Playgroud)

现在我有

var data = one.Intersect(two, (x, y) => x.Id == y.Id).ToArray();
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*Chu 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();
Run Code Online (Sandbox Code Playgroud)

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