我想通过比较一个属性来对两个匿名类型数组执行交叉.集合是具有两个属性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动态进行比较
我认为你可以用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