#c# #linq-to-sql #union #iqueryable
#c# #linq-to-sql #объединение #iqueryable
Вопрос:
Я пытаюсь использовать объединение в своем коде:
var qryQuestions =
(from q in db.table1
where q.ID == ID
amp;amp; q.categoryID == categoryID
orderby q.questionOrder ascending
select q) .Union
(from qp in db.table2
where qp.ID == ID
amp;amp; qp.categoryID == categoryID
orderby qp.questionOrder ascending
select qp);
и я получаю сообщение об ошибке:
Ошибка 15 ‘System.Linq.IOrderedQueryable<table1>’ не содержит определения для ‘объединения’ и лучший метод расширения перегружает ‘System.Linq.Количество параллелей.Объединение<TSource>(System.Linq.Параллельный запрос<TSource>, System.Коллекции.Общий.IEnumerable<TSource>)’ имеет некоторые недопустимые аргументы
и
Ошибка 30 Аргумент экземпляра: не удается преобразовать из ‘System.Linq.IOrderedQueryable<table1>’ to ‘System.Linq.ParallelQuery<table2>’
Ответ №1:
Это потому, что вы выбираете два разных набора данных, и Linq не может понять, что вы пытаетесь сделать.
вместо ….выберите q и …. выберите qp
var qryQuestions = (from q in db.table1
where q.ID == ID amp;amp; q.categoryID == categoryID
select new {questionOrder= q.questionOrder, value2 = q.Value2})
.Union
(from qp in db.table2
where qp.ID == ID amp;amp; qp.categoryID == categoryID
select new {questionOrder= qp.questionOrder, value2 = qp.Value2}))
.OrderBy(x => x.questionOrder);
Причина этого в том, что вы пытаетесь выделить совершенно разные объекты, т. Е. q != qp, поскольку они не из одной таблицы.
Ответ №2:
Что произойдет, если выполнить объединение перед оформлением заказа?
var qryQuestions = (from q in db.table1
where q.ID == ID amp;amp; q.categoryID == categoryID
select q)
.Union
(from qp in db.table2
where qp.ID == ID amp;amp; qp.categoryID == categoryID
select qp)
.OrderBy(x => x.questionOrder);
Комментарии:
1. снова те же ошибки. Даже если я не использую OrderBy, это все равно выдает мне те же ошибки. Просто не позволяет мне использовать объединение здесь.
Ответ №3:
Хотя ответ Кельвина частично верен (две части объединения должны быть одного типа / сущности), синтаксис IQueryable.Union() работает с параметром IEnumerable. Попробуйте следующее.
var qryQuestions = (from q in db.table1
where q.ID == ID amp;amp; q.categoryID == categoryID
select new {questionOrder= q.questionOrder, value2 = q.Value2})
.Union
((from qp in db.table2
where qp.ID == ID amp;amp; qp.categoryID == categoryID
select new {questionOrder= qp.questionOrder, value2 = qp.Value2})
.AsEnumerable())
.OrderBy(x => x.questionOrder);