如何使用WHERE执行LINQ JOIN

问题描述 投票:0回答:1

我需要帮助来使用带有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语句有疑问。老实说,我不知道把它放在哪里。

有人可以帮我这个吗?

c# linq join
1个回答
0
投票
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,因此您必须获取默认值,访问它的属性。

© www.soinside.com 2019 - 2024. All rights reserved.