Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较两个列表并更新其列值_C#_List_Compare - Fatal编程技术网

C# 比较两个列表并更新其列值

C# 比较两个列表并更新其列值,c#,list,compare,C#,List,Compare,我有两个C列表,列表A和列表B 如何比较这两个列,如果找到了特定列的重复项,例如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") +

我有两个C列表,列表A和列表B 如何比较这两个列,如果找到了特定列的重复项,例如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\u duplicate,其值为listB中的ID\u num

因此,副本将以某种方式与此ID_num链接

然后我会将该ID_副本更新到数据库中

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

如果我理解是一个连接:

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类上创建一个计算列

public string ValueToCompare
{
   get
   {
      return this.IdNum.ToString() + this.IdCust.ToString();
   }
}
并在join上使用此选项进行比较


Max

请向我们显示您目前的代码。这可能有助于理解您的问题。因此,基本上,您有两个数据表,并且希望在一个数据表中找到给定列在另一个数据表中给定列的重复项?简而言之,我有两个数据集,它们被转换为两个列表listA,listB。两个列表都有相同的列columnA,columnB,但listA也有列ID_duplicate null值是默认值,listB有列ID我想比较listA和listB,如果发现重复项,用listB中列ID的值更新listA中的列ID_duplicate,然后更新DB表中的值,假设listA是table tableA.Max,它是否可以与ListViews一起使用,以便可以在listview而不是list中显示?我正在使用windows窗体。Tnx!我不知道,在您的示例中,您使用数据集的值填充列表对象,并基于此方法而不是数据集尝试实体框架。。。。。
public string ValueToCompare
{
   get
   {
      return this.IdNum.ToString() + this.IdCust.ToString();
   }
}