Я пытаюсь объединить 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 для преобразования в таблицу данных?