有如下代码,问题我描述在注释里了,分不够 :-)
public PagedList<User> QueryBy(UserSearchModel pager, SearchModel model) { var query = _userRep.GetAll() .WhereIf(pager != null && pager.RoleId.HasValue, f => f.Roles.Any(r => r.Id == pager.RoleId.Value)); //已知Organization 与 User 是多对多的关系 User.Organizations Organization.Users //而且 Organization 是具有层级关系的 //我想查出 某一部门(及其所有子部门)下的所有用户(只传了部门Id) 该怎么查? return query.SmartPager(model, pager); }
我会分两次查询,第一次:根据部门ID,在c#中处理好该部门和其子部门ID(多级,需要递归);然后第二次,根据这个部门ID列表,查询所有用户。
如果子部门只有一级的话,可以用自关联在sql中查询子部门Id,然后和用户表连接查询出数据。
我之前的处理是用CTE去查询包括父Id及其子Id的所有Id序列,然后再处理。。
我刚接触EF,存疑,故有此问...
看来大家处理的方式差不多。。EF在递归查询上是不是只能查一级?
@Kratos Zhang: EF最终还是转换为SQL,你觉得SQL能查几级呢?只要不嫌麻烦,N级都可以查,哈哈~~
那最终有答案了吗?
先一次性查出所有组织架构的Id和parentId(数据估计在4-20条),然后递归查Id序列,不准备用法sql了。
- - 实在不想在codefirst 方式上用存储过程或是拼接sql..