Мне нужно написать метод на C #, который будет возвращать какой-то конкретный словарь из БД. Допустим, данные, хранящиеся в 2 таблицах, выглядят так:
Таблица групп (id, name):
1, 'Management'
2, 'IT Department'
3, 'Production'
Пользователи (id, name, groupId, projectId):
1, 'John', 1, 1
2, 'Ben', 2, 1
Теперь мне нужно проверить, что в каждом проекте в каждой группе есть не менее одного пользователя. Запрос sql для получения этой информации будет:
declare @projectId int;
set @projectId = 1;
select g.Name, case when(isnull(u.id,0) > 0) then 1 else 0 end HasUsers
from groups g
left join users u
on g.id = u.groupId and u.projectId = @projectId;
Информация, возвращаемая из этого запроса, выглядит следующим образом:
'Management', 1
'IT Department', 1
'Production', 0
Что такого особенного в запросе? Условие для projectId включено в часть 'join', а не в часть 'where'. В результате строка для группы «Производство» возвращается со значением 0. Когда мы перемещаем условие для projectId в «где часть», запись не будет присутствовать в возвращаемом результате.
Наконец, вопрос - возможно ли достичь подобного эффекта, используя одно лямбда-выражение? (Я знаю, что могу получить 2 коллекции и, используя какое-то утверждение цикла, получить конечный результат, но это не предмет этого вопроса)
С уважением,
яки