1

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

例如:

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

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

4

3 回答 3

5

在这种情况下您不能使用该方法Merge,而是应该创建新的DataTabledt3,然后根据表 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);
}
于 2012-09-28T06:28:17.600 回答
1

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

听起来您想要执行的是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 中测试。

于 2012-09-27T19:26:05.113 回答
1

假设你有表CategoryProduct相关的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 解决方案。您还可以遍历第一个数据表并从第二个数据表添加列

于 2012-09-28T01:38:15.633 回答