首页 新闻 会员 周边 捐助

linq中的on后面跟多个条件报错

0
悬赏园豆:5 [已解决问题] 解决于 2019-01-18 10:32

 int p = roleId ?? 1;
                var query = from a in dbHelper.SysModule.DefaultIfEmpty()
                            join b in dbHelper.SysModelRole.DefaultIfEmpty()
                            on new { a.Id, p } equals new { b.ModuleId, b.RoleId }
                            into x
                            from n in x.DefaultIfEmpty()
                            where a.ParentId == parentId && n.RoleId == p
                            select (new { a.Id, a.Name, a.SysType, a.ParentId, n.IsAuth, n.RoleId });

问题补充:

果然没人会嘛?

彪悍的代码不需要注释的主页 彪悍的代码不需要注释 | 菜鸟二级 | 园豆:221
提问于:2017-04-20 13:03
< >
分享
最佳答案
0

你可以直接把where条件写到dbHelper.SysModule.DefaultIfEmpty()后面,你把p直接写到on条件里感觉不妥,on的条件里应该放表里存在的字段。

试下这样:

               int p = roleId ?? 1;
                var query = from a in dbHelper.SysModule.DefaultIfEmpty().Where(o=>o.ParentId == parentId)
                            join b in dbHelper.SysModelRole.DefaultIfEmpty().Where(o.RoleId==p)
                            on a.Id equals  b.ModuleId into x
                            from n in x.DefaultIfEmpty()
                            select new { 
                            a.Id,
                            a.Name,
                            a.SysType, 
                            a.ParentId,
                            n==null?"":n.IsAuth,
                            n==null?"":n.RoleId 
                            };
收获园豆:5
开山怪不怪 | 小虾三级 |园豆:544 | 2017-04-21 14:17
其他回答(3)
0

这样行吗?

int p = roleId ?? 1;
                var query = from a in dbHelper.SysModule.DefaultIfEmpty()
                            join b in dbHelper.SysModelRole.DefaultIfEmpty()
                            on  a.Id equals   b.ModuleId 
                            into x
                            from n in x.DefaultIfEmpty()
                            where a.ParentId == parentId && n.RoleId == p
                            select (new { a.Id, a.Name, a.SysType, a.ParentId, n.IsAuth, n.RoleId });
吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-20 14:13

.ToList()的时候 会出现异常 。

0

你上面的on里面的p错了,应该是a.RoleID。where里面等于条件就好了

蕾蕾啦啦啦 | 园豆:216 (菜鸟二级) | 2017-04-20 14:32

a表没有这个字段。 看下面sql编辑器。

@彪悍的代码不需要注释: 

int p = roleId ?? 1;
                var query = from a in dbHelper.SysModule.DefaultIfEmpty()
                            join b in dbHelper.SysModelRole.DefaultIfEmpty()
                            on new { a.Id, Roleid=p } equals new { b.ModuleId, Roleid=b.RoleId }
                            into x
                            from n in x.DefaultIfEmpty()
                            where a.ParentId == parentId && n.RoleId == p
                            select (new { a.Id, a.Name, a.SysType, a.ParentId, n.IsAuth, n.RoleId });

这样试试

支持(0) 反对(0) 蕾蕾啦啦啦 | 园豆:216 (菜鸟二级) | 2017-04-20 14:37
0

重新引用了 dll就可以搞定

彪悍的代码不需要注释 | 园豆:221 (菜鸟二级) | 2019-01-18 10:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册