У меня есть следующие три таблицы, и мне нужно ввести информацию из двух разных таблиц.
- Таблица
baTable
имеет поля OrderNumber
и Position
. - Таблица
accessTable
имеет поля OrderNumber
и ProcessSequence
(среди прочих) - Таблица
historyTable
имеет поля OrderNumber
и Time
(среди прочих).
.
var progress = from ba in baTable
from ac in accessTable
where ac.OrderNumber == ba.OrderNumber
select new {
Position = ba.Position.ToString(),
Time = "",
Seq = ac.ProcessSequence.ToString()
};
progress = progress.Concat(from ba in baTable
from hs in historyTable
where hs.OrderNumber == ba.OrderNumber
select new {
Position = ba.Position.ToString(),
Time = String.Format("{0:hh:mm:ss}", hs.Time),
Seq = ""
});
int searchRecs = progress.Count();
Запрос успешно компилируется, но когда SQL выполняется во времяПри вызове Count()
я получаю ошибку
Все запросы, объединенные с использованием оператора UNION, INTERSECT или EXCEPT, должны иметь одинаковое количество выражений в своих целевых списках.
Очевидно, что каждый из двух списков состоит из трех элементов, один из которых является константой.Другие справочные советы предположили, что компилятор Visual Studio 2010 C # оптимизировал константы, и я экспериментировал с альтернативами константам.
Самое удивительное, что если запись Time=
в select new {...}
закомментирован в обоих подзапросах, при выполнении SQL ошибка не возникает.