EntityFramework — LINQ Присоединяйтесь к помощи
-
18-09-2019 - |
Вопрос
У меня есть следующая схема:
Клиенты - ID клиентаПользователи - ID пользователяОфисы - идентификатор офиса
КлиентОфисы -Идентификатор клиента, идентификатор офисаПользовательские офисы - идентификатор пользователя, идентификатор офиса
Сущности, выделенные жирным шрифтом, — это сущности EntityFramework.
Теперь мне нужно написать функцию, которая принимает UserId и возвращает список клиентов, которые также принадлежат офисам, к которым принадлежит пользователь.
Например, Say ABC Inc.работает с лондонским офисом XYZ Inc.работает с офисом в Нью-Йорке.Пользователь «Yakoon» работает только для Лонд Офиса.
Оператор linq при выполнении должен возвращать только ABC Inc.Если «Yakoon» также принадлежит нью-йоркскому офису, то он должен вернуться к ABC и XYZ Inc.
Спасибо
Решение
Эквивалентный подход в рамках сущности будет выглядеть примерно так:
public IEnumerable<Client> GetClientsForUser(int id)
{
return (from u in objectContext.Users
where u.UserId == id
from o in u.Offices
from c in o.Clients
select c);
}
Убедитесь, что у вас есть первичные ключи в таблицах UserOffices и ClientOffices, чтобы EF распознавал их как соединительные таблицы.
Другие советы
Как насчет этого:
public IEnumerable<Client> GetClientsForUser(int id)
{
return (from u in userOffices
where u.UserId == id
join o in clientOffices on u.OfficeId equals o.OfficeId
join c in clients on o.ClientId equals c.ClientId
select c);
}