Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将2个数据表合并到1个具有相同行数的数据表中。_C#_Asp.net - Fatal编程技术网

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

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

如何将两个数据表合并到同一行中。我使用不同的存储过程将数据输入数据集中。在使用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
您希望得到的结果集如下所示

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公共方法