У меня есть база данных SQL и проект ядра .Net 3.1, содержащий 3 таблицы, называемые членами, членством и клубами. Каждый участник уникален с уникальным MemberId и может состоять в нескольких клубах. Для каждого клуба, членом которого является член, у вас есть одна строка в таблице членства, которая содержит MemberId, ClubId и MembershipID.
Членство:
|Id|MemberId|ClubId| ******************** |1 |1 |1 | |1 |1 |2 | |2 |2 |2 | |3 |3 |3 | |3 |3 |2 | |3 |3 |1 |
Клубы:
|Id|Name |Subject| ************************ |1 |Chess club |Chess | |2 |Foxtrot |Dance | |3 |Paint club |Art |
Участники:
|Id|First Name |phone | ************************ |1 |Bob |xxx | |2 |Mandy |yyy | |3 |Joe |zzz |
У меня есть список, содержащий все идентификаторы клубов, которые должны совпадать. Теперь, используя Linq, я хотел бы получить всех участников, входящих в несколько клубов. Так, например, я хотел бы получить всех членов, которые являются частью шахматного клуба (идентификатор: 1) И клуба рисования (идентификатор: 3), поэтому со списком [1, 3] в этом случае только Джо.
Это довольно упрощенная версия псевдокода, но я надеюсь, что она поможет продемонстрировать, что я хочу сделать.
memberships.Where(membership => membership.clubId == 1 AND membership.clubId == 3)
Это, очевидно, не работает, поскольку ни одна строка не соответствует этому, плюс я хочу, чтобы она была динамической со списком клубных идентификаторов.
var memberClubData = [1,3] memberships.Where(membership => memberClubData.All(x => x == membership.clubId))
Я знаю, как вы можете сделать это с помощью SQL с подзапросом и подсчетом, но я полностью застрял, когда дело доходит до выполнения этого с помощью LINQ в С#.