0

我有两个 C# 列表(List listA 和 List listB)我如何比较这两个,如果发现重复(特定列,例如 ID_num 和 ID_cust),则更新列“ID_duplicate”,这是 listB 的列 ID 的值。

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_num来自listB.

这样重复项将以某种方式与 this 联系起来ID_num

然后我会将其更新ID_duplicate到数据库。

编辑:在下面的评论中添加了更多解释。

4

1 回答 1

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; }
}

显然,您可以像这样在 Row 类上创建一个计算列

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

并在加入时使用它进行比较

最大限度

于 2013-04-05T13:50:40.750 回答