C# 输入数组长于此表中的列数

C# 输入数组长于此表中的列数,c#,visual-studio,visual-studio-2010,datatable,C#,Visual Studio,Visual Studio 2010,Datatable,我定义了这样一个数据表 DataTable dtFinal = new DataTable(); dtFinal.Columns.Add("AVNR", typeof(int)); dtFinal.Columns.Add("Substation", typeof(string)); dtFinal.Columns.Add("ColumnTitle", typeof(string)); dtFinal.Columns.Add("S6_NAME", typeof(string)); dtFinal.

我定义了这样一个数据表

DataTable dtFinal = new DataTable();
dtFinal.Columns.Add("AVNR", typeof(int));
dtFinal.Columns.Add("Substation", typeof(string));
dtFinal.Columns.Add("ColumnTitle", typeof(string));
dtFinal.Columns.Add("S6_NAME", typeof(string));
dtFinal.Columns.Add("Voltage", typeof(string));
dtFinal.Columns.Add("Wert", typeof(decimal));
我在两个表之间做一个连接,得到一个结果集

  var results = from table1 in dtTimeListTable.AsEnumerable()
                join table2 in readyDataTable.AsEnumerable() on (decimal)table1["Avnr"] equals (int)table2["Avnr"]
                select new
                {
                    AVNR = (int)table2["AVNR"],
                    Substation = (string)table2["Substation"],
                    ColumnTitle = (string)table2["ColumnTitle"],
                    S6_NAME = (string)table2["S6_NAME"],
                    Voltage = (string)table2["Voltage"],                                  
                    Wert = (decimal)table1["Wert"]                                   
                 };
要填充数据表,请执行以下操作:

            dtFinal.Rows.Add(results.ToArray());
但我会得到一个错误,利克

输入数组长于此表中的列数

两个datatable都有6列,可能是什么问题?

是一种添加单个
数据行的方法,但您正在尝试添加所有行

您需要一个循环:

foreach(var x in query)
    dtFinal.Rows.Add(x.AVNR, x.Substation, x.ColumnTitle, x.S6_NAME, x.Voltage, x.Wert);
您还可以通过以下方式为每个
数据行构建
对象[]

var joinedRows = from table1 in dtTimeListTable.AsEnumerable()
                 join table2 in readyDataTable.AsEnumerable() on (decimal) table1["Avnr"] equals (int) table2["Avnr"]
                 select new { r1 = table1, r2 = table2 };

foreach (var x in joinedRows)
{
    object[] fields =
    {
        x.r2.Field<int>("AVNR"), x.r2.Field<string>("Substation"), x.r2.Field<string>("ColumnTitle"),
        x.r2.Field<int>("S6_NAME"), x.r2.Field<string>("Voltage"), x.r1.Field<decimal>("Wert"),
    };
    dtFinal.Rows.Add(fields);
}
var joinedRows=来自dtTimeListTable.AsEnumerable()中的表1
将表2连接到readyDataTable.AsEnumerable()中(十进制)表1[“Avnr”]等于(int)表2[“Avnr”]
选择新的{r1=table1,r2=table2};
foreach(joinedRows中的变量x)
{
对象[]字段=
{
x、 r2.字段(“AVNR”)、x.r2.字段(“变电站”)、x.r2.字段(“专栏标题”),
x、 r2.字段(“S6_名称”)、x.r2.字段(“电压”)、x.r1.字段(“Wert”),
};
dtFinal.Rows.Add(字段);
}
是一种添加单个
数据行的方法,但您正在尝试添加所有行

您需要一个循环:

foreach(var x in query)
    dtFinal.Rows.Add(x.AVNR, x.Substation, x.ColumnTitle, x.S6_NAME, x.Voltage, x.Wert);
您还可以通过以下方式为每个
数据行构建
对象[]

var joinedRows = from table1 in dtTimeListTable.AsEnumerable()
                 join table2 in readyDataTable.AsEnumerable() on (decimal) table1["Avnr"] equals (int) table2["Avnr"]
                 select new { r1 = table1, r2 = table2 };

foreach (var x in joinedRows)
{
    object[] fields =
    {
        x.r2.Field<int>("AVNR"), x.r2.Field<string>("Substation"), x.r2.Field<string>("ColumnTitle"),
        x.r2.Field<int>("S6_NAME"), x.r2.Field<string>("Voltage"), x.r1.Field<decimal>("Wert"),
    };
    dtFinal.Rows.Add(fields);
}
var joinedRows=来自dtTimeListTable.AsEnumerable()中的表1
将表2连接到readyDataTable.AsEnumerable()中(十进制)表1[“Avnr”]等于(int)表2[“Avnr”]
选择新的{r1=table1,r2=table2};
foreach(joinedRows中的变量x)
{
对象[]字段=
{
x、 r2.字段(“AVNR”)、x.r2.字段(“变电站”)、x.r2.字段(“专栏标题”),
x、 r2.字段(“S6_名称”)、x.r2.字段(“电压”)、x.r1.字段(“Wert”),
};
dtFinal.Rows.Add(字段);
}

您的
dtTimeListTable
readyDataTable
中有哪些列?因为
result
不是您在
select
子句中声明的匿名对象,它是该匿名对象的
IEnumerable
。(由于Tim更快,转换为注释…)您的
dtTimeListTable
readyDataTable
中有哪些列?因为
result
不是您在
select
子句中声明的匿名对象,它是该匿名对象的
IEnumerable
。(由于提姆跑得更快,因此转换为评论…)