2013-04-05 116 views
0

我有兩個C#列表(列表listA和列表listB) 我怎麼能比較這兩個,如果重複(的特定列例如ID_num和ID_cust)找到然後更新列「ID_duplicate」,它是listB的列ID的值。C#比較兩個列表並更新它的列值

DataSet ds = subMain; 

List<string> listA = (from r in ds.Tables[0].AsEnumerable() 
         Select r.Field<string>("ID_num") + 
         r.Field<string>("ID_cust")).ToList(); 

DataSet dsMain = Mains; 

List<string> listB = (from r in dsMain.Tables[0].AsEnumerable() 
         select r.Field<string>("ID_num") + 
         r.Field<string>("ID_cust")).ToList(); 

我想這listA將包含新列ID_duplicate與價值ID_numlistB

因此,重複將以某種方式與此ID_num鏈接。

然後我會將ID_duplicate更新到數據庫。

編輯: 在評論以下添加更多解釋。

+0

到目前爲止請向我們顯示您的代碼。這可能有助於理解你的問題。 – 2013-04-05 11:04:05

+0

如此bascially你有兩個數據表,你想在另一個數據表的給定列中的一個數據表中找到給定列的重複項? – 2013-04-05 11:04:43

+0

總之, 我有兩個數據集被轉換爲兩個列表(listA,listB)。 這兩個列表都有相同的列(columnA,columnB),但listA也有列ID_duplicate(空值是默認值),listB有列ID 我想比較listA到listB,如果找到重複項,更新列ID_duplicate(in listA)與listB中列ID的值,然後更新DB表中的值,比如說listA是table「tableA」。 – SuperManSL 2013-04-05 11:20:32

回答

0

如果我的理解是一個連接:

var listA = new List<Row> { 
    new Row { ID= 1, IdNum = 1, IdCust = 1 }, 
    new Row { ID= 2, IdNum = 1, IdCust = 2 }, 
    new Row { ID= 3, IdNum = 2, IdCust = 1 }, 
    new Row { ID= 4, IdNum = 1, IdCust = 3 }, 
    new Row { ID= 5, IdNum = 3, IdCust = 1 }, 
    new Row { ID= 6, IdNum = 4, IdCust = 1 } 
}; 

var listB = new List<Row> { 
    new Row { ID= 1, IdNum = 5, IdCust = 1 }, 
    new Row { ID= 5, IdNum = 6, IdCust = 2 }, 
    new Row { ID= 7, IdNum = 2, IdCust = 1 }, 
    new Row { ID= 9, IdNum = 1, IdCust = 3 }, 
    new Row { ID= 11, IdNum = 7, IdCust = 2 } 
}; 

    var t = (from a in listA 
      join b in listB on a.IdCust.ToString() + a.IdNum.ToString() 
      equals 
      b.IdCust.ToString() + b.IdNum.ToString() 
      select new 
      { 
       ID = a.ID, 
       IdUpdate = b.ID 
      }).ToArray(); 

foreach (var item in t) 
{ 
    Console.WriteLine("ID {0} IdUpdate {1}", item.ID, item.IdUpdate); 
} 

這裏Row類

class Row 
{ 
    public int ID { get; set; } 

    public int IdNum { get; set; } 

    public int IdCust { get; set; } 
} 

Obviusly你可以這樣

public string ValueToCompare 
{ 
    get 
    { 
     return this.IdNum.ToString() + this.IdCust.ToString(); 
    } 
} 

和使用創建行級計算列此爲參考加入以供比較

最大

+0

Max會與ListView一起工作(這樣它可以用來在listview中顯示,而不是列表)? 我正在使用Windows窗體。 Tnx! – SuperManSL 2013-04-08 11:06:22

+1

我不知道,在你的例子中你用數據集的值填充List 對象,並且基於我的這個方法的例子,而不是DataSet嘗試Entity Framework ..... – Max 2013-04-08 15:58:35