Ошибка преобразования параллельного запроса Linq в ienumerable

Используя Linqpad для обработки моего запроса, получите указанную выше ошибку:

(from bp in basepay_records
select new { empID = bp.Prep_emp, loc = bp.Prep_loc }).Union
                (
                    from ass in emp_assignments
                    select new { empID = ass.Prea_emp, loc = ass.Prea_loc }
                )

Я пробовал это с парнем и без него в первом запросе, без различий. Этот союз является частью более крупного запроса, и в конечном итоге он окажется в подзапросе, который используется в соединении, поэтому я не могу сделать обычное, хотя я проверил его как отдельный запрос, и он не прошел, говоря нет определения для Союза:

var q1 = from bp in basepay_records select new { empID = bp.Prep_emp, loc = bp.Prep_loc };

var q2 = from ass in emp_assignments select new { empID = ass.Prea_emp, loc = ass.Prea_loc };

q1.Union (q2).Dump ("Union");

Я подтвердил, что все типы данных совпадают.

Полное сообщение об ошибке:

Не удается выполнить выделение текста: «System.Linq.IQueryable» не содержит определения для «Union» и лучшей перегрузки метода расширения «System.Linq.ParallelEnumerable.Union(System.Linq.ParallelQuery, System.Collections.Generic.IEnumerable) ' имеет несколько недопустимых аргументов

Аргумент экземпляра: невозможно преобразовать из «System.Linq.IQueryable» в «System.Linq.ParallelQuery».


person BattlFrog    schedule 30.05.2013    source источник
comment
Знаете ли вы, что такое конкретное сообщение об ошибке. Одной из возможностей может быть тип для empID или loc для каждого анонимного типа. Например, один может быть длинным, а другой — целым.   -  person cgotberg    schedule 30.05.2013
comment
Что такое basepay_records?   -  person Dave Bish    schedule 30.05.2013
comment
basepay_records и emp_assignments — это таблицы.   -  person BattlFrog    schedule 30.05.2013
comment
Вы вызвали AsParallel для одного из объектов, но не для другого?   -  person Servy    schedule 30.05.2013


Ответы (1)


У меня сейчас работает. Мне пришлось разбить его на 2 запроса, что кажется глупым, но вот так. Дайте мне знать, если у вас есть лучший способ:

var q1 = from mstr in emp_master_records
                            join loctab in
                                (
                                    from bp in basepay_records
                                    select new { empID = bp.Prep_emp, loc = bp.Prep_loc }
                                )
                            on mstr.Prem_emp equals loctab.empID
                            where mstr.Prem_email.StartsWith("TEST_USER")
                            select loctab.loc;

var q2 = from mstr in emp_master_records
                            join loctab in
                                (
                                    from ass in emp_assignments
                                    select new { empID = ass.Prea_emp, loc = ass.Prea_loc }
                                )
                            on mstr.Prem_emp equals loctab.empID
                            where mstr.Prem_email.StartsWith("GREGORY_RANDALL")
                            select loctab.loc;

q1.Union(q2).Dump ("Union");
person BattlFrog    schedule 30.05.2013