将2个数据表合并到1个具有相同行数的数据表中。

如何将两个数据表合并到同一行。 我使用不同的存储过程将数据导入数据集。 在使用c#的asp.net中,我想合并它们,因此与表1的行数相同,表2中添加了一列。

例如:

DataTable table1 = dsnew.Tables[0]; DataTable table2 = dsSpotsLeft.Tables[0]; table1.Merge(table2); 

这是取4行而不是2行。 我在这里缺少什么? 提前致谢!!

在不了解这些表的设计的情况下,其中一些是猜测。

你想要表演的是一个JOIN 。 例如,如果您有一个表格如下:

 StateId, StateName 

和另一个看起来像的表

 EmployeeId, EmployeeName, StateId 

并且您希望得到一个看起来像的结果集

 EmployeeId, EmployeeName, StateId, StateName 

您将执行以下查询:

 SELECT Employee.EmployeeId, Employee.EmployeeName, Employee.StateId, State.StateName FROM Employee INNER JOIN State ON Employee.StateId = State.StateId 

这会为您提供结果集,但不会更新任何数据。 再次,推测您的数据集,我假设您的Employee表版本可能看起来像结果集:

 EmployeeId, EmployeeName, StateId, StateName 

但是StateName需要填充。 在这种情况下,您可以编写查询:

 UPDATE Employee SET Employee.StateName = State.StateName FROM Employee INNER JOIN State ON Employee.StateId = State.StateId 

在SQL Server中测试过。

在这种情况下,您不能使用方法Merge ,而是应该创建新的DataTable dt3,然后根据表1和2添加列和行:

 var dt3 = new DataTable(); var columns = dt1.Columns.Cast() .Concat(dt2.Columns.Cast()); foreach (var column in columns) { dt3.Columns.Add(column.ColumnName, column.DataType); } //TODO Check if dt2 has more rows than dt1... for (int i = 0; i < dt1.Rows.Count; i++) { var row = dt3.NewRow(); row.ItemArray = dt1.Rows[i].ItemArray .Concat(dt2.Rows[i].ItemArray).ToArray(); dt3.Rows.Add(row); } 

假设您有按CategoryID相关的表CategoryProduct ,请尝试此操作

 var joined = from p in prod.AsEnumerable() join c in categ.AsEnumerable() on p["categid"] equals c["categid"] select new { ProductName = p["prodname"], Category = c["name"] }; var myjoined = joined.ToList(); 

来源

这是一个LINQ解决方案。 您还可以遍历第一个数据表并从第二个数据表添加列