C# 如何在C中比较两个数据表并获得其他数据表中的公共记录?

C# 如何在C中比较两个数据表并获得其他数据表中的公共记录?,c#,linq-to-sql,datatable,C#,Linq To Sql,Datatable,我有两个DataTable,每个表中有两列。现在,我想比较这两个DataTable和C中第三个DataTable中的匹配行 例如: 我试过使用for循环,但速度变慢了。任何其他选择。首先使用合并函数合并两个datatable,最后在datatable上进行循环,并通过选择函数查找结果: for(i=0;i<dt1.rows.count;i++) { if (dt2.rows.count > i) { if((dt1.rows[i][1] == dt2.

我有两个DataTable,每个表中有两列。现在,我想比较这两个DataTable和C中第三个DataTable中的匹配行

例如:


我试过使用for循环,但速度变慢了。任何其他选择。

首先使用合并函数合并两个datatable,最后在datatable上进行循环,并通过选择函数查找结果:

for(i=0;i<dt1.rows.count;i++)
{
   if (dt2.rows.count > i)
    {
         if((dt1.rows[i][1] == dt2.rows[i][1])  && (dt1.rows[i][2] == dt2.rows[i][2]))
           {
               dt3.rows.add(dt.rows[i])
           } 

     }
 }
dt1 = dt.Copy();
dt1.Merge(dt2);

//Here match condition third Data table
for(int i=0; i <=dt1.rows; i++)
{
  DataRow[] foundRows = dt3.Select("page_name='" + dt1.[i]['colname'] + "'");
  //function or code here;
}

首先使用合并函数合并两个datatable,最后对datatable进行循环,并通过选择函数查找结果:

dt1 = dt.Copy();
dt1.Merge(dt2);

//Here match condition third Data table
for(int i=0; i <=dt1.rows; i++)
{
  DataRow[] foundRows = dt3.Select("page_name='" + dt1.[i]['colname'] + "'");
  //function or code here;
}

不确定您的匹配标准到底是什么。 下面可能会有所帮助

提及


不确定您的匹配标准到底是什么。 下面可能会有所帮助

提及


像下面这样使用。它会工作得更快

var matched = from table1 in dt1.AsEnumerable()
                      join table2 in dt2.AsEnumerable() on table1.Field<string>("sno") equals table2.Field<string>("sno")
                      where table1.Field<string>("name") == table2.Field<string>("name")
                      select table1;
        if (matched.Count()>0)
        {
            DataTable dtt = matched.CopyToDataTable();
        }

如果有帮助的话,别忘了提出来作为答案。

像下面这样使用。它会工作得更快

var matched = from table1 in dt1.AsEnumerable()
                      join table2 in dt2.AsEnumerable() on table1.Field<string>("sno") equals table2.Field<string>("sno")
                      where table1.Field<string>("name") == table2.Field<string>("name")
                      select table1;
        if (matched.Count()>0)
        {
            DataTable dtt = matched.CopyToDataTable();
        }

如果有帮助的话,别忘了提出来作为答案。

你的匹配标准是什么?此外,您可能希望发布现有的循环代码。它与LINQtoEntities有何关系?DataTable是内存中的对象。hello@Jakub Konecki,tableA中的两列都与tableB中的两列匹配,如果匹配,则获取第三个DataTable中的行。。!现在您已经从L2Entities更改为L2SQL,仍然不清楚它与数据库的关系,因为DataTable只是一个对象。答案在很大程度上取决于它,因为如果可能的话,您应该在数据库中执行这些操作。hello@TimSchmelter,我只想指定我们可以使用Linq to sql来执行这些操作。之前,它被错误地添加了!我道歉。。!你的匹配标准是什么?此外,您可能希望发布现有的循环代码。它与LINQtoEntities有何关系?DataTable是内存中的对象。hello@Jakub Konecki,tableA中的两列都与tableB中的两列匹配,如果匹配,则获取第三个DataTable中的行。。!现在您已经从L2Entities更改为L2SQL,仍然不清楚它与数据库的关系,因为DataTable只是一个对象。答案在很大程度上取决于它,因为如果可能的话,您应该在数据库中执行这些操作。hello@TimSchmelter,我只想指定我们可以使用Linq to sql来执行这些操作。之前,它被错误地添加了!我道歉。。!这将如何更快地工作?比什么快?您是如何测试性能的?这将如何更快地工作?比什么快?您是如何测试性能的?哇,这是一个多么棒的简短解决方案。虽然这是一个很老的问题,但如果你能帮我做同样的事情,但我要比较的两个数据表的列数不一样。哇,这是一个多么好的简短解决方案啊。虽然这是一个很老的问题,但如果你能帮我做同样的事情,但我要比较的两个数据表的列数不一样。