比方說,我有兩個DataTable DT1和DT2單行。C#中的DataTable#
DT1有3列:Col1中,Col2中,和COL3
和
DT2有2列:可樂,COLB。
是否可以水平連接這兩個DataTables,因此我得到Col1,Col2,Col3,ColA和ColB?
比方說,我有兩個DataTable DT1和DT2單行。C#中的DataTable#
DT1有3列:Col1中,Col2中,和COL3
和
DT2有2列:可樂,COLB。
是否可以水平連接這兩個DataTables,因此我得到Col1,Col2,Col3,ColA和ColB?
我瘦你要添加新列和複製無論是在第三個表或現有表中的一個
DataTable dt1 = new DataTable();
dt1.Columns.Add("col1", typeof(string));
dt1.Columns.Add("col2", typeof(string));
dt1.Columns.Add("col3", typeof(string));
DataTable dt2 = new DataTable();
dt2.Columns.Add("cola", typeof(string));
dt2.Columns.Add("colb", typeof(string));
object[] row = {'1', '2', '3'};
dt1.Rows.Add(row);
object[] row1 = { 'a', 'b' };
dt2.Rows.Add(row1);
// Create columns in dt1
dt1.Columns.Add("cola", typeof(string));
dt1.Columns.Add("colb", typeof(string));
// Copy data from dt2
dt1.Rows[0]["cola"] = dt2.Rows[0]["cola"];
dt1.Rows[0]["colb"] = dt2.Rows[0]["colb"];
AFAIK否,DataSet
和DataTable
不支持自動連接。您必須手動執行連接,方法是向表中添加新列並從其他表中複製列值。
只要你只是想收集的數據可以綁定到你可以做以下:
var results = from rs1 in table1.Rows.Cast<DataRow>()
join rs2 in table2.Rows.Cast<DataRow>() on rs1.Field<int>("col1") equals rs2.Field<int>("colA")
select new { col1 = rs1.Field<int>("col1"), col2 = rs1.Field<string>("col3"), col3 = rs1.Field<string>("col3"), colA = rs1.Field<int>("colA"), colB = rs1.Field<string>("colB") };
你不會得到DataTable
但在SELECT語句中定義的IEnumerable<T>
收集匿名類型的對象。 Obvoiusly我剛剛猜測了連接標準和列的數據類型,因此您必須指定適合您的實際數據的那些標準。
這是一個很好的答案,但我認爲問題中描述的兩個表格沒有共同的鍵。換句話說,我相信他要求加入兩種潛在不同類型的數據。因此,table1中的'Col1'可能是一個'int',但table2中的ColA可能是'varchar'。 – 2010-07-15 10:36:10
Jason是正確的。他們沒有共同的鑰匙,他們只是攜帶一堆數字。 – Rabin 2010-07-15 10:50:38
通過使用多個from並將條件放在where子句中,您可以在任何情況下指定linq中的連接,如果您有外鍵類型關係,這只是最簡單的選項。如果你可以指定如何關聯每個表中的行,那麼我可以用相關連接更新我的答案。 – 2010-07-15 11:37:54
當你說*加入*時,你是什麼意思?你期待一兩行嗎? – Kobi 2010-07-15 10:13:25
我希望他們在一行中。 – Rabin 2010-07-15 10:54:48