2013-08-01 31 views
0

我有一個通用列表LIST AList,已經從數據庫中填充。 我有另一個通用列表列表BList通過閱讀一個平面文件填充。 我想基於一些領域通過與另一個列表(不同的類)比較來更新通用列表中的值

更新兩個列表比較,現在用以下基本的for循環:

for (int i = 0; i < AList.Count; i++) 
      { 
       if (AList[i].Someval== BList[i].Someval) 
       { 
        AList[i].Value1 = BList[i].SomeValue; 
        ----- 
       } 
      } 

有了這個循環中的字段中的所有值列表中的所有行得到更新,而不是索引的價值。

+0

最有效的方法取決於您是否需要實際調用AList項目的屬性以設置它們,或者如果在AList中具有預定義類型,或者匿名類型正確。 –

+0

1 - 那麼,你是否希望所有值都得到更新? 2 - 您是否希望僅爲A和B列表中具有相同索引的項目執行此操作? 3 - 如果要更新A中具有someval的所有項目== B中的項目,如果BList有兩個項目與Someval相同,該怎麼辦? –

+0

@Daniel 1)不,我只想更新行中的值。 2)是 3)Blist永遠不會有更多的值AList。我不想更新所有值。 – user1110790

回答

1

在.NET 4.0中,你可以這樣做:

var listA = GetGenericListA(); 
var listB = GetGenericListB(); 

var listAandB = listA.Zip(listB, (a, b) => new {a, b}); 

foreach (var item in listAandB) 
{ 
    if (item.a.Somefield == item.b.SomeFieldb) 
    { 
     item.a.firstData = item.b.someData; 
     item.a.secondData = item.b.someotherField; 
    } 
} 

它可能不是最快的方法,但它是相當快的,它很容易閱讀/維護。

+0

時,該值不會被保存並回到空值,有沒有辦法在更新完成後再次中斷 – user1110790

相關問題