EntityFramework - LINQ Присоединиться к справке - PullRequest
1 голос
/ 05 февраля 2010

У меня есть следующая схема:

Клиенты - ClientId Пользователи - UserId Офисы - OfficeId

ClientOffices - ClientId, OfficeId UserOffices - UserId, OfficeId

Жирные объекты - это объекты EntityFramework.

Теперь мне нужно написать функцию, которая принимает UserId и возвращает список клиентов - которые также принадлежат офисам, к которым принадлежит пользователь.

Например, скажем, ABC Inc. работает с лондонским офисом, XYZ Inc. работает с нью-йоркским офисом. Пользователь "Yakoon" работает только для Lond Office.

Оператор linq при выполнении должен возвращать только ABC Inc. Если «Yakoon» также принадлежит нью-йоркскому офису, он должен вернуть btoh ABC и XYZ Inc.

Спасибо

Ответы [ 2 ]

2 голосов
/ 05 февраля 2010

Подход, эквивалентный структуре сущностей, будет выглядеть примерно так:

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 распознал их как соединительные таблицы.

1 голос
/ 05 февраля 2010

Как насчет этого:

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);
}
...