2014-02-11 58 views
0

我想通过比较一个属性在两个匿名类型数组上执行相交。集合是具有两个属性Id和Name的任何类型的数组。例如,给定一个集合:与Lambda Comparer相交的匿名类型

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

和收集二:

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

是有可能写一个Intesect陈述抢基于标识的交集,并采取不为空的名字,这样的结果将是

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

现在我有

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

,但我不知道如何处理的名称解析或怎么做对飞的比较与拉姆达

回答

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