我只是張貼這在這裏以供將來參考....
如果要使用dtblToUpdateFrom中的值更新dtblToUpdate,但需要連接多個列,則這似乎工作:
dtblToUpdate.Rows.Cast<DataRow>().Join(dtblToUpdateFrom.Rows.Cast<DataRow>(),
r1 => new { p1 = r1["ColToJoinOn1"], p2 = r1["ColToJoinOn2"] },
r2 => new { p1 = r2["ColToJoinOn1"], p2 = r2["ColToJoinOn2"] },
(r1, r2) => new { r1, r2 }).ToList()
.ForEach(o => o.r1.SetField("ColToUpdate", o.r2["ColToUpdateFrom"]));
如果有任何問題,請讓我知道。
更新:
下面是一些測試代碼顯示,它的工作原理:
DataTable dtblToUpdate = new DataTable();
dtblToUpdate.Columns.AddRange(new DataColumn[]{new DataColumn("ColToJoinOn1"), new DataColumn("ColToJoinOn2"), new DataColumn("ColToUpdate")});
dtblToUpdate.Rows.Add("1", "1", "nothing");
dtblToUpdate.Rows.Add("2", "1", "nothing");
dtblToUpdate.Rows.Add("3", "1", "nothing");
DataTable dtblToUpdateFrom = new DataTable();
dtblToUpdateFrom.Columns.AddRange(new DataColumn[]{new DataColumn("ColToJoinOn1"), new DataColumn("ColToJoinOn2"), new DataColumn("ColToUpdateFrom")});
dtblToUpdateFrom.Rows.Add("1", "1", "something");
dtblToUpdateFrom.Rows.Add("2", "1", "something");
dtblToUpdateFrom.Rows.Add("3", "2", "something"); //Won't be updated since ColToJoinOn2 does not match in dtlbToUpdate
Console.WriteLine("dtblToUpdate before update:");
foreach(DataRow drow in dtblToUpdate.Rows)
{
Console.WriteLine(drow["ColToJoinOn1"].ToString() + "." + drow["ColToJoinOn2"].ToString() + " - " + drow["ColToUpdate"].ToString());
}
dtblToUpdate.Rows.Cast<DataRow>().Join(dtblToUpdateFrom.Rows.Cast<DataRow>(),
r1 => new { p1 = r1["ColToJoinOn1"], p2 = r1["ColToJoinOn2"] },
r2 => new { p1 = r2["ColToJoinOn1"], p2 = r2["ColToJoinOn2"] },
(r1, r2) => new { r1, r2 }).ToList()
.ForEach(o => o.r1.SetField("ColToUpdate", o.r2["ColToUpdateFrom"]));
Console.WriteLine("dtblToUpdate after update:");
foreach(DataRow drow in dtblToUpdate.Rows)
{
Console.WriteLine(drow["ColToJoinOn1"].ToString() + "." + drow["ColToJoinOn2"].ToString() + " - " + drow["ColToUpdate"].ToString());
}
輸出:
dtblToUpdate before update:
1.1 - nothing
2.1 - nothing
3.1 - nothing
dtblToUpdate after update:
1.1 - something
2.1 - something
3.1 - nothing
而且,看到這個帖子了另一種選擇,當一個表缺少金額欄。你可以加入一個列的表格,並得到一個新的DataTable與兩個表之間的所有獨特的列:How to Left Outer Join two DataTables in c#?
再次這個關於不想使用for循環的任意評論。它乞求的問題:爲什麼不呢? =) –
你是否希望我們爲你寫而不顯示你的嘗試。 –
另外,LINQ通常用於創建新的集合/視圖,而不會在現有的集合/視圖中產生副作用。對於或者說foreach似乎足夠合理的使用。 –