【问题标题】:Complex LINQ Query Reference Error复杂的 LINQ 查询引用错误
【发布时间】:2017-02-18 14:07:25
【问题描述】:

我在使用来自两个不同 edmx 文件的两个表查询 LINQ 时遇到此错误。查询运行为, 只是我想要与 id 匹配的部门和名称的名称,以及在其 usermaster 表中具有该部门和名称的用户以及 Routemaster 然而 uid = 具有会话值的局部变量

  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 表达式包含对与不同上下文关联的查询的引用。

有解决这个问题的想法吗?

【问题讨论】:

  • 错误对我来说很清楚:您不能使用两个上下文创建这样的查询。要么单独获取数据并在内存中创建连接,要么创建一个所有相关模型都存在的上下文。
  • 我在加入两个表时在另一个查询中使用过,我没有收到并在那里出错,但是在加入 4 个表时它显示错误,您在加入表时是否发现任何错误? @PeterBons
  • 您可能在其他场景中首先实现了查询。您也可以发布其他查询吗?
  • @PeterBons 我在下面回答了感谢您的时间,它对我有用

标签: c# linq asp.net-mvc-5


【解决方案1】:

我找到了答案 通过启用

MultipleActiveResultSets=True

在连接字符串中,我已将查询更改为以下内容,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多