如何使用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

C#图解教程 第十九章 LINQ

如何使用 LINQ to SQL 执行 CROSS JOIN?

刚学linq 菜鸟教程没看懂 from... in ...where... join ...in ...on...equals...into请大神简单教我下