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

Posted

技术标签:

【中文标题】输入数组长于此表中的列数【英文标题】:input array is longer than the number of columns in this table 【发布时间】:2019-03-27 15:57:27 【问题描述】:

我已经定义了一个这样的数据表

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());

但是我会得到一个错误,比如这个

输入数组长于该表的列数

两个数据表都有 6 列,可能是什么问题?

【问题讨论】:

dtTimeListTablereadyDataTable 中有哪些列? 因为result 不是您在select 子句中声明的匿名对象,它是该匿名对象的IEnumerable。 (转换为评论,因为蒂姆更快......) 【参考方案1】:

DataRowCollection.Add 是一种添加单个 DataRow 的方法,但您正在尝试添加所有行。

你需要一个循环:

foreach(var x in query)
    dtFinal.Rows.Add(x.AVNR, x.Substation, x.ColumnTitle, x.S6_NAME, x.Voltage, x.Wert);

您也可以通过这种方式为每个DataRow 构建object[]

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);

【讨论】:

以上是关于输入数组长于此表中的列数的主要内容,如果未能解决你的问题,请参考以下文章

此表中的外键约束有啥问题?

我想让此表中的行可折叠/可扩展

如何在此表中激活排序?

如何将此表中的数据作为列表提交到asp.net mvc中的操作? [关闭]

没有聚合函数的 SQL Server 数据透视查询

如何仅提取此表中列的数字部分? (Python)