我很難過這個。Linq將DataTable與動態添加的主鍵合併在一起
我試圖將兩個DataTable
合併成一個。最好我會用linq
來執行這個任務,但問題是我需要動態地爲連接添加條件。每個表的數據來自兩個不同的存儲過程調用,並且可以切換使用哪些調用。結果可以因列數和主鍵可用而有所不同。
目標是將第一個結果集中的常規字符串替換爲可包含unicode的第二個數據庫(但僅當它包含該特定主鍵組合的值時)。
我的LINQ查詢應該是這樣的:
var joined = (from DataRow reg in dt1.Rows
join DataRow uni in dt2.Rows
on new { prim1 = reg.ItemArray[0], prim2 = reg.ItemArray[1] }
equals new { prim1 = uni.ItemArray[0], prim2 = uni.ItemArray[1] }
select new
{
prim1 = reg.ItemArray[0],
prim2 = reg.ItemArray[1],
value1 = reg.ItemArray[4],
value2 = uni.ItemArray[3] ?? reg.ItemArray[3]
}
);
這完全適用於我想要什麼,但正如我所說,我需要能夠定義其在每個表中的列是主鍵,所以這一點:
join DataRow uni in dt2.Rows
on new { prim1 = reg.ItemArray[0], prim2 = reg.ItemArray[1] }
equals new { prim1 = uni.ItemArray[0], prim2 = uni.ItemArray[1] }
需要的東西來代替,如創建表之間或執行linq
動態地添加的主鍵之前DataRelation
。
ALSO,我需要選擇像SQLS *
而不是指定每一列,因爲我不知道列的第一個結果集數。
我也嘗試通過添加主鍵並進行合併來連接表,但是我該如何選擇dt2中的哪一列來覆蓋dt1中的哪一個?
DataTable join = new DataTable("joined");
join = dt1.Copy();
join.Merge(dt2, false, MissingSchemaAction.Add);
join.AcceptChanges();
我正在使用VS2012。