C# 将2个数据表合并到1个具有相同行数的数据表中。
如何将两个数据表合并到同一行中。我使用不同的存储过程将数据输入数据集中。在使用c#的asp.net中,我希望合并它们,以便有与表1相同数量的行,并从表2中添加一列 例如:C# 将2个数据表合并到1个具有相同行数的数据表中。,c#,asp.net,C#,Asp.net,如何将两个数据表合并到同一行中。我使用不同的存储过程将数据输入数据集中。在使用c#的asp.net中,我希望合并它们,以便有与表1相同数量的行,并从表2中添加一列 例如: DataTable table1 = dsnew.Tables[0]; DataTable table2 = dsSpotsLeft.Tables[0]; table1.Merge(table2); 这将为我获取4行而不是2行。我错过了什么?提前谢谢 在不了解这些表的设计的情况下,有些只是猜测 听起来您想要执行的是一个JOI
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
您希望得到的结果集如下所示
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表版本可能与resultset类似:
EmployeeId, EmployeeName, StateId, StateName
但是需要填充StateName
。在这种情况下,您可以编写查询:
UPDATE Employee
SET Employee.StateName = State.StateName
FROM Employee
INNER JOIN State ON Employee.StateId = State.StateId
在SQL Server中测试。在不了解这些表的设计的情况下,其中一些是推测 听起来您想要执行的是一个
JOIN
。例如,如果有一个表如下所示:
StateId, StateName
另一张桌子看起来像
EmployeeId, EmployeeName, StateId
EmployeeId, EmployeeName, 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表版本可能与resultset类似:
EmployeeId, EmployeeName, StateId, StateName
但是需要填充StateName
。在这种情况下,您可以编写查询:
UPDATE Employee
SET Employee.StateName = State.StateName
FROM Employee
INNER JOIN State ON Employee.StateId = State.StateId
在SQL Server中测试。假设您有与
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解决方案。您还可以在第一个数据表中循环,并从第二个数据表中添加列,前提是您有与
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解决方案。您还可以循环第一个数据表并从第二个数据表添加列。在这种情况下,您不能使用方法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);
}
var dt3=新数据表();
var columns=dt1.columns.Cast()
.Concat(dt2.Columns.Cast());
foreach(列中的var列)
{
dt3.Columns.Add(column.ColumnName,column.DataType);
}
//TODO检查dt2的行数是否多于dt1。。。
for(int i=0;i
在这种情况下,您不能使用方法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);
}
var dt3=新数据表();
var columns=dt1.columns.Cast()
.Concat(dt2.Columns.Cast());
foreach(列中的var列)
{
dt3.Columns.Add(column.ColumnName,column.DataType);
}
//TODO检查dt2的行数是否多于dt1。。。
for(int i=0;i
您能描述一下这两张表吗?两个表中都有一个字段名列表就足够了。因此,您正在通过存储过程将数据从两个表中拉入DataTable对象,然后尝试合并数据。你能在存储过程中完成吗?你能描述一下这两个表吗?两个表中都有一个字段名列表就足够了。因此,您正在通过存储过程将数据从两个表中拉入DataTable对象,然后尝试合并数据。你能在存储过程中完成吗?Concat是字符串的静态方法。Concat@shujatAli:嗯,这也是数组上的一个方法,请看一看MSDN@CoungLe请看一下数组的msdn公共方法Concat是字符串的静态方法。Concat@shujatAli:嗯,它也是数组上的一个方法,请看一看MSDN@CoungLe请看一下数组的msdn公共方法