Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有并集的子查询上的LINQ联接_C#_Linq_Tsql - Fatal编程技术网

C# 具有并集的子查询上的LINQ联接

C# 具有并集的子查询上的LINQ联接,c#,linq,tsql,C#,Linq,Tsql,在最后一行中获取错误,表示loctab不在范围内。我已经玩过一点了,但是我看不出有什么不同的方法来做。你最后一行应该是这样读的 from mstr in m_db.master_records join loctab in ( from bp in m_db.basepay_records select new { empID = bp.p_empid, loc = bp.p_loc } ) .U

在最后一行中获取错误,表示loctab不在范围内。我已经玩过一点了,但是我看不出有什么不同的方法来做。

你最后一行应该是这样读的

      from mstr in m_db.master_records
      join loctab in
      (
          from bp in m_db.basepay_records
          select new { empID = bp.p_empid, loc = bp.p_loc }
      )
      .Union
      (
          from ass in m_db.emp_assignments
          select new { ass.a_emp, ass.a_loc }
      )
       on mstr.prem_emp = loctab.empID
我不明白这里“不在范围内”是什么意思,但有一件事不对。两种匿名类型的定义应完全相同,否则无法合并:

你有:

on loctab.empID equals mstr.prem_emp
select //... perform your select on the unioned tables.
然后也使用:

select new { empID = bp.p_empid, loc = bp.p_loc }

也许例外信息是一种伪装的方式告诉这一点

一件事是“=”应该是“等于”。此外,外部查询上没有select。奇怪的是,它告诉您loctab将超出范围,因为我不认为它超出范围。在没有数据库的情况下很难进行分析,但您可能应该使用join/on声明第一个查询,然后使用union声明第二个查询。如果需要,你可以单独申报。query1WithJoin.Union(query2)。这是一个相等的东西。谢谢大家。
select new { empID = ass.a_emp, loc = ass.a_loc }