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 });
你可以直接把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 };
这样行吗?
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 });
.ToList()的时候 会出现异常 。
你上面的on里面的p错了,应该是a.RoleID。where里面等于条件就好了
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 });
这样试试
重新引用了 dll就可以搞定