試試這個
var results = from table1 in dt1.AsEnumerable()
join table2 in dt2.AsEnumerable() on table1["Location"] equals table2["Location"]
select new
{
Location = table1["Location"],
Visa_Q1 = (int)table1["Visa_Q1"],
Visa_Q2 = (int)table1["Visa_Q2"],
Visa_Q3 = (int)table2["Visa_Q3"],
Visa_Q4 = (int)table2["Visa_Q4"],
};
編輯
試這用於選擇所有列
DataTable table = new DataTable();
foreach (DataColumn column in t1.Columns)
{
table.Columns.Add(column.ColumnName, column.DataType);
}
foreach (DataColumn column in t2.Columns)
{
if (column.ColumnName == "Location")
table.Columns.Add(column.ColumnName + "2", column.DataType);
else
table.Columns.Add(column.ColumnName, column.DataType);
}
var results = t1.AsEnumerable().Join(t2.AsEnumerable(),
a => a.Field<String>("Location"),
b => b.Field<String>("Location"),
(a, b) =>
{
DataRow row = table.NewRow();
row.ItemArray = a.ItemArray.Concat(b.ItemArray).ToArray();
table.Rows.Add(row);
return row;
});
你的要求是否說循環被禁止? – Marc 2012-01-08 13:23:12
由於性能要求,我們始終儘可能使用循環。所以我需要LINQ – venkat 2012-01-08 13:25:02
你從哪裏得到'DataTables'?如果您想避免循環,您需要修改該代碼--LINQ to Objects僅在內部使用循環。 – Douglas 2012-01-08 16:08:53