Как выполнить LINQ JOIN с WHERE - PullRequest
0 голосов
/ 09 мая 2018

Мне нужна помощь для выполнения JOIN с использованием предложения LINQ with WHERE. Проблема в том, что CaseId в событиях равен нулю (не все события связаны с регистром) в результате не отображается событие.

Вот мой код:

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();

Я нашел несколько примеров того, как использовать LINQ LEFT JOIN, используя INTO, но у меня возникли проблемы с оператором WHERE. Я, честно говоря, не знаю, где его разместить.

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 09 мая 2018
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 может теперь быть нулевым, поэтому вам нужно перейти к значению по умолчанию, получая доступ к его свойствам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...