C# 如何比较不同数据表中的两列
表1C# 如何比较不同数据表中的两列,c#,datatable,C#,Datatable,表1 id | fileName | fileDateTime 1 | somefile | somedatetime 2 | somefile2 | somedatetime2 表2 id | fileName | fileDateTime | somefile1 | somedatetime1 | somefile2 | somedatetime2 产出表3 id | fileName
id | fileName | fileDateTime
1 | somefile | somedatetime
2 | somefile2 | somedatetime2
表2
id | fileName | fileDateTime
| somefile1 | somedatetime1
| somefile2 | somedatetime2
产出表3
id | fileName | fileDatetime
| somefile1 | somedatetime1
我想比较这两个表(仅列2和3),只包含两个表中没有的内容,第二个表中没有ID字段。然后我计划解析文件中的数据,并将文件信息添加到数据库中,以记录文件已被解析。我无法比较这两个字段。这似乎不起作用
for (int i = 0; i < finalTable.Rows.Count; i++)
{
for (int r = 0; r < filesTable.Rows.Count; i++)
{
if (finalTable.Rows[i][2] == filesTable.Rows[r][2])
{
finalTable.Rows.Remove(finalTable.Rows[i]);
}
}
}
for(int i=0;i
假设该值是一个字符串,您可以执行以下操作
for (int i = 0; i < finalTable.Rows.Count; i++)
{
for (int r = 0; r < filesTable.Rows.Count; i++)
{
if (finalTable.Rows[r].Field<string>(2) == filesTable.Rows[r].Field<string>(2))
{
finalTable.Rows.Remove(finalTable.Rows[i]);
}
}
}
for(int i=0;i
如果是另一种类型,只需将
更改为真实类型 您可以使用Linq来实现它,如下所示
假设您的字段是字符串。对于其他数据类型,您可以相应地强制转换它们:
using System.Data.Linq;
......
......
// Merge both tables data and group them by comparing columns values
dt1.Merge(dt2);
var g = dt1.AsEnumerable()
.GroupBy(x => x[0]?.ToString() + x[1]?.ToString()) // You can build Unique key here, I used string concatination
.ToDictionary(x => x.Key, y => y.ToList());
var unique = dt1.Clone();
foreach (var e in g)
{
if (e.Value.Count() == 1) // In either table - Intersaction
{
e.Value.CopyToDataTable(unique, LoadOption.OverwriteChanges);
}
if (e.Value.Count() == 2)
{
// In both tables -Union
}
}