Использование Union с System.Linq.IQueryable - PullRequest
1 голос
/ 12 ноября 2011

Я пытаюсь использовать объединение в моем коде:

var qryQuestions =
    (from q in db.table1
    where q.ID == ID
       && q.categoryID == categoryID
    orderby q.questionOrder ascending
    select q) .Union
        (from qp in db.table2
        where qp.ID == ID
           && qp.categoryID == categoryID
        orderby qp.questionOrder ascending
        select qp);

и я получаю сообщение об ошибке:

Ошибка 15 'System.Linq.IOrderedQueryable ' не содержит определения для 'Union' и наилучшей перегрузки метода расширения 'System.Linq.ParallelEnumerable.Union (System.Linq.ParallelQuery , System.Collections.Generic.IEnumerable ) 'имеет недопустимые аргументы

и

Ошибка 30: аргумент экземпляра: невозможно преобразовать из 'System.Linq.IOrderedQueryable ' в 'System.Linq.ParallelQuery '

Ответы [ 3 ]

2 голосов
/ 18 февраля 2015

Это потому, что вы выбираете два разных набора данных, а Linq не может понять, что вы пытаетесь сделать.

вместо .... выберите q и .... выберите qp

var qryQuestions = (from q in db.table1
                where q.ID == ID && q.categoryID == categoryID
                select new {questionOrder= q.questionOrder, value2 = q.Value2})
               .Union
               (from qp in db.table2
                where qp.ID == ID && qp.categoryID == categoryID
                select new {questionOrder= qp.questionOrder, value2 = qp.Value2}))
               .OrderBy(x => x.questionOrder);

Причина этого заключается в том, что вы пытаетесь выделить целые разные сущности - т.е. q! = Qp, поскольку они не из одной таблицы.

1 голос
/ 12 ноября 2011

Что произойдет, если вы выполните объединение перед заказом?

var qryQuestions = (from q in db.table1
                    where q.ID == ID && q.categoryID == categoryID
                    select q)
                   .Union
                   (from qp in db.table2
                    where qp.ID == ID && qp.categoryID == categoryID
                    select qp)
                   .OrderBy(x => x.questionOrder);
0 голосов
/ 10 марта 2018

Хотя ответ Кельвина частично верен (две части объединения должны быть одного типа / объекта), синтаксис IQueryable.Union () работает с параметром IEnumerable.Попробуйте следующее.

var qryQuestions = (from q in db.table1
                where q.ID == ID && q.categoryID == categoryID
                select new {questionOrder= q.questionOrder, value2 = q.Value2})
               .Union
               ((from qp in db.table2
                 where qp.ID == ID && qp.categoryID == categoryID
                 select new {questionOrder= qp.questionOrder, value2 = qp.Value2})
                .AsEnumerable())
               .OrderBy(x => x.questionOrder);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...