2010-06-14 72 views
0

我有一个对象Project,它有多个字段,其中一个是Name。我有一个包含其中一些字段的项目电子表格,另一个包含其余字段。但是,这两个电子表格都有Name字段。合并两个包含不同数据的对象列表

我读过它们并填充了两个List<Project>,只填充该特定源的可用字段。例如。从表1中的项目的样子:

{Name="MyProj", Type="Form", Priority=NULL} 

而一个项目从列表2:

{Name="MyProj", Type=NULL, Priority="High"} 

现在,我想这两个列表合并成一个,其中每个项目对象都有其所有领域填充名称字段用于匹配元素。

我该如何做到这一点?有什么好的方法简洁地做到这一点?

感谢

回答

3

我可能会使用??运营商找到值。字典可能是有用的。

// put one into a dict for faster access 
var dict2 = list2.ToDictionaty(x => x.Name, x); 

// merge the lists using ?? 
var merged = list1.Select(x => 
{ 
    var p2 = dict2[x.Name]; 
    return new Project() 
    { 
     Name = x.Name, 
     Type = x.Type ?? p2.Type, 
     Priority = x.Priority ?? p2.Priority 
    } 
}); 

或者

var merged = list1 
    // join the lists by the name 
    .Join(list2, x => x.Name, x => x.Name, (p1, p2) => new { P1 = p1, P2 = p2 }) 
    .Select(x => 
    new Project() 
    { 
     Name = P1.Name, 
     Type = P1.Type ?? P2.Type, 
     Priority = P1.Priority ?? P2.Priority 
    }); 

有这种变异的百名。您只能加入并处理foreach中的结果,以将一个列表的数据合并到另一个列表的数据中。等等

当一个列表中的项目可能丢失时,它会变得更加复杂,如果没有任何列表完成,则更加复杂。然后,在开始时创建项目名称的完整列表可能很有用。

+0

太好了,谢谢你的建议。我采取了第一个样本来解决问题。 – 2010-06-14 12:05:55

相关问题