2013-05-30 29 views
0

使用Linqpad摸出我的查询,得到上述错误:错误的LINQ parallequery转换为IEnumerable的

(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 } 
       ) 

我已经有和无的第一个查询,不存在在括号试了一下。这个联合是一个更大的查询的一部分,并且这最终会放在一个用于联接的子查询中,所以我不能照常进行,尽管我测试了它作为一个独立的查询,但它失败了,说:没有Union的定义:

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”不包含“联盟”的定义和最佳推广方法重载“System.Linq.ParallelEnumerable.Union (System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable)”有一些无效参数

实例参数:无法从转换 'System.Linq.IQueryable' 到 'System.Linq.ParallelQuery'

+1

你知道什么是具体的错误信息。一种可能性是empID类型,或者loc在每个匿名类型中是不同的。例如,一个可能很长,而另一个则是int。 – cgotberg

+0

什么是basepay_records? –

+0

basepay_records和emp_assignments是表格。 – BattlFrog

回答

0

我有它现在工作。我不得不将它分成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");