如何使用WHERE执行LINQ JOIN
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用WHERE执行LINQ JOIN相关的知识,希望对你有一定的参考价值。
我需要帮助来使用带有WHERE子句的LINQ来执行JOIN。问题是当事件中的CaseId为空(并非所有事件都与案例相关)时,它会导致NOT显示事件。
这是我的代码:
var queryEvents = (from e in db.events
join u in db.users on e.UserID equals u.UserID
join c in db.cases on e.CaseID equals c.CaseID
where e.UserID == Program.loggedUser.UserID || (e.UserGroupID == Program.loggedUser.UserGroupID && c.AccessLvl>0)
select new { User = u.FirstName + " " + u.LastName, e.Name, e.Description, e.StartDate }).OrderByDescending(x => x.StartDate);
gvAppointments.DataSource = queryEvents.ToList();
我找到了一些关于如何使用INTO使用LINQ LEFT JOIN的例子,但后来我对WHERE语句有疑问。老实说,我不知道把它放在哪里。
有人可以帮我这个吗?
答案
var queryEvents = (from e in db.events
join u in db.users on e.UserID equals u.UserID
join c in db.cases on e.CaseID equals c.CaseID into cases
from subC in cases.DefaultIfEmpty()
where e.UserID == Program.loggedUser.UserID || (e.UserGroupID == Program.loggedUser.UserGroupID && subC?.AccessLvl ?? 0 > 0)
select new { User = u.FirstName + " " + u.LastName, e.Name, e.Description, e.StartDate }).OrderByDescending(x => x.StartDate);
gvAppointments.DataSource = queryEvents.ToList();
您只需要知道,subC现在可能为null,因此您必须获取默认值,访问它的属性。
以上是关于如何使用WHERE执行LINQ JOIN的主要内容,如果未能解决你的问题,请参考以下文章
Linq-to-Entities:带有 WHERE 子句和投影的 LEFT OUTER JOIN
如何使用 linq lambda 扩展方法执行带有 where 子句的左外连接
C# LINQ 详解 From Where Select Group Into OrderBy Let Join
如何使用 LINQ to SQL 执行 CROSS JOIN?
刚学linq 菜鸟教程没看懂 from... in ...where... join ...in ...on...equals...into请大神简单教我下