linq to Entities的主外间关联条件过滤 问题
代码如下,List<Module> modules = new List<Module>();
modules = (from ms in DBEntities.Module
join act in DBEntities.Action on ms.ModuleID equals act.ModuleID
where ms.ModuleID == act.ModuleID && act.IsVisiable.Value
select ms).ToList();
我想从Module表中查找出所有的模块,以及其外键关联的功能(Action),但是并不是所有的关联到的Action都需要返回,而是要对这个子表中的IsVisiable属性进行过滤;这样的linq怎么写。我现在写的这个运行时报错:
The specified LINQ expression contains references to queries that are associated with different contexts.
如果简单的直接返回Module会把所有子表的Action记录也查出来,数据比较大,我想直接在通过Entity查的时候就过滤掉,而不是查出来之后再做处理。
--------------------编程问答--------------------
--------------------编程问答-------------------- 如果不行
List<Module> modules = new List<Module>();
modules = (from ms in DBEntities.Module
join act in DBEntities.Action
on ms.ModuleID equals act.ModuleID
where act.IsVisiable.Value
select ms).ToList();
你可以帖出你的SQL语句 来看一下 --------------------编程问答-------------------- 不行,直接抛异常,还是那个错,SQL语句也无法得到 --------------------编程问答-------------------- 呵呵,对LINQ to Entities暂时还没有学习,不太了解。
不过看异常信息,貌似你使用了两个不同的数据上下文吧?
另外,你那个查询语句中,竟然使用了join语句,就不需要在where语句中才进行ms.ModuleID == act.ModuleID判断了,具体做法可参见1楼。 --------------------编程问答-------------------- 1楼写的没问题,我想不是语句的问题 --------------------编程问答-------------------- 语句有了,
List<Module> modules = new List<Module>();
modules = (from ms in DBEntities.Module
where ms.Action.Any(a=>a.IsVisiable.Value)
select ms).ToList();
或者
modules =DBEntities.Module.Where(ms=>ms.Action.Any(a=>a.IsVisiable.Value)).ToList();
现在不报错,可以查询出结果,但是对于外键关联表Action却没有过滤掉记录,而是照样全部返回?
需要的结果是IsVisiable为true的Action,怎么会这样呢.. --------------------编程问答-------------------- List<Module> modules = new List<Module>();
modules = (from ms in DBEntities.Module
where ms.Action.Any(a=>a.IsVisiable==true)
select ms).ToList(); --------------------编程问答-------------------- List<Module> modules = new List<Module>();
modules = (from ms in DBEntities.Module
from act in DBEntities.Action
where ms.ModuleID == act.ModuleID &&
act.IsVisiable.Value
select ms).Distinct().ToList();
看看这样行不行。应该是可以的。
补充:.NET技术 , LINQ