首页 新闻 会员 周边

Entity framework 层级查询

0
悬赏园豆:5 [已解决问题] 解决于 2013-09-06 09:29

有如下代码,问题我描述在注释里了,分不够 :-)

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);
        }
Kratos Zhang的主页 Kratos Zhang | 初学一级 | 园豆:6
提问于:2013-09-05 21:03
< >
分享
最佳答案
1

我会分两次查询,第一次:根据部门ID,在c#中处理好该部门和其子部门ID(多级,需要递归);然后第二次,根据这个部门ID列表,查询所有用户。

 

如果子部门只有一级的话,可以用自关联在sql中查询子部门Id,然后和用户表连接查询出数据。

收获园豆:5
幻天芒 | 高人七级 |园豆:37175 | 2013-09-05 23:15

我之前的处理是用CTE去查询包括父Id及其子Id的所有Id序列,然后再处理。。

我刚接触EF,存疑,故有此问...

 

看来大家处理的方式差不多。。EF在递归查询上是不是只能查一级?

Kratos Zhang | 园豆:6 (初学一级) | 2013-09-05 23:22

@Kratos Zhang: EF最终还是转换为SQL,你觉得SQL能查几级呢?只要不嫌麻烦,N级都可以查,哈哈~~

幻天芒 | 园豆:37175 (高人七级) | 2013-09-06 01:18
其他回答(1)
0

那最终有答案了吗?

吕津 | 园豆:31 (初学一级) | 2013-09-06 08:46

先一次性查出所有组织架构的Id和parentId(数据估计在4-20条),然后递归查Id序列,不准备用法sql了。

 - - 实在不想在codefirst 方式上用存储过程或是拼接sql..

支持(0) 反对(0) Kratos Zhang | 园豆:6 (初学一级) | 2013-09-06 09:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册