【发布时间】:2018-07-24 14:59:22
【问题描述】:
我有 5 个表 Workflow 为“A”,WorkflowSteps 为“B”,AppUser 为“C”,AppRoles 为“D”,AppDepartment 为“E”我想以如下方式获取记录
1) 根据 workflowId 匹配来自 A 和 B 的记录
2) 匹配来自 B 和 C、B 和 D、B 和 E 的记录,因为表 B 具有外键 UserId、RoleId 和 DepartmentId
但问题在于 B UserId 中的某些列为 null 有些将 DepartmentId 设为 Null,有些将 RoleId 设为 Null,因此内部连接不起作用
这是我的查询,它必须获取三行,但我得到 0
var workflows = (from q in _context.WorkFlowSteps
join p in _context.WorkFlow
on q.WorkFlowId equals p.WorkFlowId
join r in _context.AppUsers
on q.ApprovalUserId equals r.UserId
from dep in _context.AppDepartment
from role in _context.AppRoles
where (q.DepartmentId == dep.DepartmentId) &&
(q.RoleId == role.RoleId)&&
(q.WorkFlowId == id &&
q.IsAllowed == true &&
p.WebSiteId == WebsiteId)
select new WorkFlowViewModel
{
UserId =Convert.ToInt32(q.ApprovalUserId.HasValue?
q.ApprovalUserId:
(q.DepartmentId.HasValue?
q.DepartmentId:
q.RoleId)),
ModeId = p.ModeId,
WebSiteId = p.WebSiteId,
Step = q.StepNo,
Name =q.ApprovalUserId.HasValue ?
p.Name :
(q.DepartmentId.HasValue?
dep.Name :
r.Name),
WorkFlowId = p.WorkFlowId
}).ToList();
【问题讨论】:
-
but the problem is for some column in B UserId is null some have DepartmentId as Null and some have RoleId is Null so inner join won't work为此做left join -
作为@HemidAbbasov 的建议。您可以为此使用左连接。访问此页面以参考更多信息:devcurry.com/2011/01/linq-left-join-example-in-c.html.
-
您应该非常很少加入 LINQ to EF。相反,只需遵循导航属性。您的 EF 模型知道如何为您连接表。
标签: asp.net-mvc entity-framework linq join