2010-02-05 4 views
1

Я следующую схему:EntityFramework - LINQ Присоединяйтесь помощь

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

ClientOffices - ClientId, OfficeId UserOffices - UserId, OfficeId

Жирным шрифтом являются объекты EntityFramework.

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

Например, ABC Inc. работает с Лондонским офисом, XYZ Inc. работает с офисом в Нью-Йорке. Пользователь «Якун» работает только для Lond Office.

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

Благодаря

ответ

2

субъект рамки эквивалентный подход будет что-то вроде:

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

+0

спасибо за отличную помощь ... работал как и ожидалось! – effkay

1

Как об этом :

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); 
} 
+0

thx .. но o не распознается в VS .... lemme думает об этих строках; – effkay

+0

Просто обновил его после быстрого теста, теперь он должен работать. –

+0

Спасибо .... за добрые усилия; Да, он должен работать, но теперь есть еще одна проблема; EF помещает столбец FK в userOffices, раскрывает его как коллекцию. Я вижу, что можно сделать. – effkay