2017-02-18 114 views
1

我在使用来自两个不同edmx文件的两个表查询LINQ时遇到此错误。查询运行作为, 只要我想谁与具有部门和指定在其usermaster表以及马路大师也 凡为 的uid =有局部变量的会话值复杂的LINQ查询参考错误

ID和用户相匹配的部门名称及名称
var qryRoute = (from rm in db.RouteMasters 
         from um in db.UserMasters 
         from dm in db.DeptMasters 
         from desgm in db2.DESG_MASTER 
         where um.UserID == uid 
         && rm.UnitID == um.UnitID 
         && rm.ForDept == um.DeptID 
         && rm.ReqDept == dm.DeptID 
         && rm.ReqDesg == desgm.ID 
         && rm.RouteType == "General" 
         && rm.IsActive == 1 
         select new 
         { 
          rm.RouteID, 
          rm.UnitID, 
          rm.ForDept, 
          rm.RouteType, 
          rm.ReqDept, 
          rm.ReqDesg, 
          dm.Department, 
          desgm.DESG_ID, 
          rm.Seq, 
          rm.IsActive 

         }); 

     RouteMaster RM; 
     foreach (var i in qryRoute) 
     { 
      RM = new RouteMaster(); 
      RM.RouteID = i.RouteID; 
      RM.UnitID = i.UnitID; 
      RM.ForDept = i.ForDept; 
      RM.RouteType = i.RouteType; 
      RM.ReqDept = i.ReqDept; 
      RM.ReqDesg = i.ReqDesg; 
      RM.ReqDeptName = i.Department; 
      RM.ReqDesgName = i.DESG_ID; 
      RM.Seq = i.Seq; 
      RM.IsActive = i.IsActive; 
      obj.RouteList.Add(RM); 
     } 

db和db2是两个不同edmx文件的实例。

显示错误:指定的LINQ表达式包含对与不同上下文关联的查询的引用。

任何想法来解决这个问题?

+1

误差不干我清楚:使用两个上下文你​​不能创造这样的查询。分别获取数据并创建内存中的连接或创建所有相关模型所在的上下文。 –

+0

当我加入两个表时,我在另一个查询中使用过,我没有收到错误,但在加入4个表时显示错误,您是否在连接表时发现错误? @PeterBons –

+0

您可能在其他场景中首先实现查询。你可以发布其他查询吗? –

回答

1

我找到答案 通过启用

MultipleActiveResultSets=True 

在ConnectionString中,我已经改变了我的查询到下面,

 var qryRoute = (from rm in db.RouteMasters 
         from um in db.UserMasters 
         where um.UserID == uid 
         && rm.UnitID == um.UnitID 
         && rm.ForDept == um.DeptID 
         && rm.RouteType == "General" 
         && rm.IsActive == 1 
         select new 
         { 
          rm.RouteID, 
          rm.UnitID, 
          rm.ForDept, 
          rm.RouteType, 
          rm.ReqDept, 
          rm.ReqDesg, 
          rm.Seq, 
          rm.IsActive 
         }); 
     obj.RouteList = new List<RouteMaster>(); 
     foreach (var i in qryRoute) 
     { 
      obj.RouteList.Add(new RouteMaster 
      { 
       RouteID = i.RouteID, 
       UnitID = i.UnitID, 
       ForDept = i.ForDept, 
       RouteType = i.RouteType, 
       ReqDept = i.ReqDept, 
       ReqDesg = i.ReqDesg, 
       ReqDeptName = db.DeptMasters.FirstOrDefault(x => x.DeptID == i.ReqDept).Department, 
       ReqDesgName = db2.DESG_MASTER.FirstOrDefault(x => x.ID == i.ReqDesg).DESG_ID, 
       Seq = i.Seq, 
       IsActive = i.IsActive 
      }); 
     }