我想通过比较一个属性来对两个匿名类型数组执行交叉。集合是具有两个属性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进行比较
答案 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();