Witam wszystkich
Potrzebuję pomocy ze skonstruowanie odpowiedniego zapytania Linq to Entities.
Zacznę od początku. W swoim projekcie używam Entity Framework jako metody dostępu do bazy danych. Utworzyłem sobie dbcontext na podstawie istniejącej bazy. W momencie jak potrzebuję wybrać z bazy dane robię to przez linq to entities. Ale sytuacja się skomplikowała kiedy muszę wiązać dane z różnych tabel w celu ograniczenia liczby zwracanych danych zgodnie z wcześniej ustalonymi zasadami. Poniżej przedstawiam testowy zestaw tabel i powiązań między nimi:
Tabela 'A'
- ID,
- Nazwa,
- ID_C - relacja to tabeli 'C'.
Tabela 'B'
- ID,
- Nazwa.
Tabela 'A_B' - realizuje relację wiele-wiele pomiędzy A oraz B
- ID_A,
- ID_B.
Tabela 'C'
- ID,
- Nazwa.
Tabela 'B_C' - realizuje relację wiele-wiele pomiędzy B oraz C
- ID_B,
- ID_C.
Tabela 'D'
- ID,
- Nazwa
- ID_A - relacja do tabeli 'A'.
Tabela 'E'
- ID,
- Nazwa
- ID_D - relacja do tabeli 'A'.
Koniec tabel. Dodam, że to tylko fragment na potrzeby przykładu. Poniżej zapytanie SQL realizujące pobranie wyników z tabeli 'E' zgodnie z obowiązującymi mnie restrykcjami:
Select _E.* from E as _E, D as _D, A as _A
inner join A_B as _A_B on _A_B.ID_B = 4 And _A_B.ID_A = A.ID
left outer join B_C as _B_C on _B_C.ID_B = 4 And A.ID_C = _B_C.ID_C
where _E.ID_D = _D.ID And _D.ID_A = _A.ID
Powyższe zapytanie, pomimo używania literek zamiast 'normalnych' nazw, wydaje się, mam nadzieję, zrozumiałe. Natomiast gorzej jest z linq to entities, ponieważ nie ma tam czegoś takiego jak 'left outer join', a oprócz tego w trakcie generowania dbcontext, entity framework zamienił sobie tabele realizujące relacje na obiekty nawigacyjne, czyli np. w obiekcie reprezentującym tabelę 'B' znajduje się EntityCollection <'A'>, w którym zapisane są wszystkie wiersze z tabeli 'A' spełniające relację z tabeli 'A_B'. Więc nie mogę zrobić złączenia 'inner join A_B as _A_B on _A_B.ID_B = 4 And _A_B.ID_A = A.ID'. Masakra. Gubię się w tym pewnie dlatego, że nie znam zbyt dobrze entity framework oraz linq to entities.
Bardzo proszę o pomoc w utworzeniu zapytania linq, odpowiadającemu powyższemu sql'owi.
Pozdrawiam