比较两个数据表和第二个数据表中更新的常用值
本文关键字:数据表 第二个 更新 常用值 比较 两个 | 更新日期: 2023-09-27 18:35:51
我有两个DataTable
,我想从第一个中选择第二个数据表中存在的行
例如:
表 1:
ColA1 ColA2
1 sampletext1
2 sampletext2
4 sampletext4
表 2:
ColA1 ColA2
1
2
2
我想要这样的输出:
表 2:
ColA1 ColA2
1 sampletext1
2 sampletext2
2 sampletext2
我尝试下面的代码,但它不起作用
foreach (DataRow dr in dtprofit.Rows)
{
DataRow[] Selected = dtAccount.Select("AccDesc= '" + dr["Account"] + "' ");
if(Selected.Length>0)
{
dr["Type"] = Selected[0]["AccType"];
}
}
提前谢谢。
您可以使用此 LINQ 查询来连接两个表:
var commonRows = from row1 in Table1.AsEnumerable()
join row2 in Table2.AsEnumerable()
on row1.Field<int>("ColA1") equals row2.Field<int>("ColA1")
select new { row2, newValue = row1.Field<string>("ColA2") };
foreach (var commonRowInfo in commonRows)
{
commonRowInfo.row2.SetField("ColA2", commonRowInfo.newValue);
}
结果:
1 sampletext1
2 sampletext2
2 sampletext2
这是另一种(可能效率较低)的方法:
var t1Rows = Table1.AsEnumerable();
foreach (DataRow row in Table2.Rows)
{
DataRow row1 = t1Rows.FirstOrDefault(r =>
row.Field<int>("ColA1") == r.Field<int>("ColA1"));
if (row1 != null)
row.SetField("ColA2", row1.Field<string>("ColA2"));
}
最后但并非最不重要的一点是,下面是一种没有 LINQ 的方法,即使在 .NET 1.1 中也有效:
foreach (DataRow row in Table2.Rows)
{
DataRow[] rows = Table1.Select("ColA1=" + row["ColA1"]);
if (rows.Length >= 1)
row["ColA2"] = rows[0]["ColA2"];
}
试试这个:
var table1Dic = table1.AsEnumerable().ToDictionary(dr => dr.Field<int>("ColA1"), dr => dr.Field<string>("ColA2"));
foreach (var row in table2.AsEnumerable()) {
var key = (int)row["ColA1"];
if (table1Dic.ContainsKey(key))
row.SetField<string>("ColA2", table1Dic[key]);
}
首先,获取两个数据表中共有的所有记录(不需要两个数据表的结构相同)。若要选择公用行,请使用此代码。
var sameRecords = from table1 in dtFirst.AsEnumerable() join table2 in secondDt.AsEnumerable() on table1.Field<string>("abc") equals table2.Field<string>("def") where table1.Field<string>("abc") == table2.Field<string>("def") select table1;
if (sameRecords .Count() > 0)
{
//Copy selected recors to the Data Table object
DataTable dt =sameRecords .CopyToDataTable();
}
现在,您拥有根据设置的标准在两个数据表中共有的所有记录。用于更新结果 DT 对象中的记录 迭代行并像这样操作您想要的任何内容
foreach (DataRow row in dt.Rows)
{
//Place your code
}
干杯。。。。。。。。。。。快乐编码