将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
相关的表Category
和Product
,请尝试此操作
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();
来源
- 关于DataTable的LINQ查询
- C#中DataTables的内部联接
- http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/ecb6a83d-b9b0-4e64-8107-1ca8757fe58c/
这是一个LINQ解决方案。 您还可以遍历第一个数据表并从第二个数据表添加列