2013-04-05 169 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