Как решить ошибку - невозможно оценить выражение. Операция не поддерживается. Неизвестная ошибка: 0x80070057 - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь объединить 3 таблицы сущностей с заполненными данными с несколькими столбцами только из этих таблиц в таблицу данных

DataTable dttable = new DataTable();

dttable.Columns.Add("billno", typeof(String));
dttable.Columns.Add("date", typeof(DateTime));
dttable.Columns.Add("time", typeof(String));
dttable.Columns.Add("sname", typeof(String));
dttable.Columns.Add("name", typeof(String));
dttable.Columns.Add("qty", typeof(Decimal));
dttable.Columns.Add("rate", typeof(Decimal));


var rows = from mobjbmast in Context.bmasts.AsEnumerable()
           join mobjbtran in Context.btrans
           on mobjbmast.billno equals mobjbtran.billno
           join mobjwaiter in Context.waiters
           on mobjbmast.scode equals mobjwaiter.code
           where mobjbmast.billno == mbillno
           select dttable.LoadDataRow(new object[]
           {
                 mobjbmast.billno,
                 mobjbmast.date,
                 mobjbmast.time,
                 mobjwaiter.name,
                 mobjbtran.name,
                 mobjbtran.qty,
                 mobjbtran.rate
           }, false);

Ожидается, что приведенный выше код заполнит таблицу данных. Но никаких рядов не уступило. При отладке вышеприведенного кода переменная 'lines' отображается в отладчике

невозможно оценить выражение. Операция не поддерживается. Неизвестная ошибка: 0x80070057 '

Итак, я попробовал это:

var rows = from mobjbmast in Context.bmasts.AsEnumerable()
           join mobjbtran in Context.btrans.AsEnumerable()
           on mobjbmast.billno equals mobjbtran.billno
           join mobjwaiter in Context.waiters.AsEnumerable()
           on mobjbmast.scode equals mobjwaiter.code
           where mobjbmast.billno == mbillno
           select new { billno = mobjbmast.billno, date = mobjbmast.date, time = mobjbmast.time, sname = mobjwaiter.name, name = mobjbtran.name, qty = mobjbtran.qty, rate = mobjbtran.rate };

Без изменений в сценарии.

Попытка выше с ToList()

var rows = from mobjbmast in Context.bmasts.ToList()
           join mobjbtran in Context.btrans.ToList()
           on mobjbmast.billno equals mobjbtran.billno
           join mobjwaiter in Context.waiters.ToList()
           on mobjbmast.scode equals mobjwaiter.code
           where mobjbmast.billno == mbillno
           select new { billno = mobjbmast.billno, date = mobjbmast.date, time = mobjbmast.time, sname = mobjwaiter.name, name = mobjbtran.name, qty = mobjbtran.qty, rate = mobjbtran.rate };

На этот раз ошибка исчезла, но в отладчике я вижу сообщение «Перечисление не дало результатов».

Также попытался добавить DefaultIfEmpty().

Я знаю, что могу загрузить этот вывод в List<T>. Но здесь нужна таблица данных, а класс для этого не нужен.

Как структурировать запрос, чтобы он возвращал правильный IEnumerable для преобразования в таблицу данных?

1 Ответ

0 голосов
/ 13 апреля 2019

Наконец я решил это так, основываясь на предложениях некоторых сайтов

DataTable dttable = new DataTable();

dttable.Columns.Add("billno", typeof(String));
dttable.Columns.Add("date", typeof(DateTime));
dttable.Columns.Add("time", typeof(String));
dttable.Columns.Add("sname", typeof(String));
dttable.Columns.Add("name", typeof(String));
dttable.Columns.Add("qty", typeof(Decimal));
dttable.Columns.Add("rate", typeof(Decimal));

var rows = from mobjbmast in Context.bmasts.AsEnumerable()
           join mobjbtran in odlsContext.btrans
           on mobjbmast.billno equals mobjbtran.billno
           join mobjwaiter in Context.waiters
           on mobjbmast.scode equals mobjwaiter.code
           where mobjbmast.billno == mbillno
           let billarray = new object[]
           {
                mobjbmast.billno,
                mobjbmast.date,
                mobjbmast.time,
                mobjwaiter.name,
                mobjbtran.name,
                mobjbtran.qty,
                mobjbtran.rate
           }
           select billarray;
foreach (var array in rows)
{
    dttable.Rows.Add(array);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...