如何将两个数据表合并到同一行。我正在使用不同的存储过程将数据放入数据集中。在使用 c# 的 asp.net 中,我想合并它们,以便与表 1 的行数相同,并从表 2 中添加一列。
例如:
DataTable table1 = dsnew.Tables[0];
DataTable table2 = dsSpotsLeft.Tables[0];
table1.Merge(table2);
这是取我 4 行而不是 2 行。我在这里想念什么?提前致谢!!
在这种情况下您不能使用该方法Merge
,而是应该创建新的DataTable
dt3,然后根据表 1 和表 2 添加列和行:
var dt3 = new DataTable();
var columns = dt1.Columns.Cast<DataColumn>()
.Concat(dt2.Columns.Cast<DataColumn>());
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);
}
在不了解这些表的设计的情况下,其中一些是猜测。
听起来您想要执行的是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 中测试。
假设你有表Category
和Product
相关的CategoryID
,然后试试这个
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 解决方案。您还可以遍历第一个数据表并从第二个数据表添加列