входной массив длиннее, чем количество столбцов в этой таблице - PullRequest
0 голосов
/ 23 октября 2018

Я определил 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.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 столбцов, в чем может быть проблема?

1 Ответ

0 голосов
/ 23 октября 2018

DataRowCollection.Add - это метод добавления одного DataRow, но вы пытаетесь добавить все строки.

Вам необходим цикл:

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

Вы можете построить object[] для каждого DataRow также следующим образом:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...