2010-06-14 149 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

相關問題