我有一个自身的父子关系的实体,表结构如图
我的linq语句如下:(我想约束加载进来的children是按照一定条件加载,但问题是我在这个结果集中循环每个MenuNodes下的children并没有按条件加载,而是每个MenuNodes下面的children全部显示。)
我尝试过这样写,但是报PATH错误
return DataContext.MenuNodes.Include(s => s.children.Where(c=>c.Roles.Any(r=>r.IsLock==false))).Where(s =>s.Roles.Any(r => r.IsLock == false)).Distinct().OrderByDescending(s => s.Displayorder).ToList();
下面这个是在网络上找的一个答案,结果还是没能解决问题,同样是子项目全部显示
var menuReservalition = from m in DataContext.MenuNodes
where m.Roles.Any(r => r.IsLock == false)
select new {MenuNode=m,children=m.children.Where(c => c.Roles.Any(r => r.IsLock == false))};
var a= menuReservalition.ToArray().Select(m => m.MenuNode);
return a.ToList();
请教下各位大虾支招,感激不尽,园豆不多,多见谅
建议写存储过程来实现吧.
不想用递归,被迫递归了!!!!
@张放春: 使用T-SQL中CET来实现就可以了,很简单的. 不想程序中的递归