我有两个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"];
}
}
提前致谢。
答案 0 :(得分:2)
您可以使用此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"];
}
答案 1 :(得分:0)
试试这个:
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]);
}
答案 2 :(得分:0)
首先,获取两个数据表中常见的所有记录(不需要两个数据表的相同结构)。 要选择常用行,请使用此代码。
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
}
干杯...........快乐编码