Left Outer Join, Linq to Entities

0

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

0

Po co chcesz robić left joina, skoro możesz użyć do tego celu navigation properties?
Google: Code first + Fluent mapping

http://msdn.microsoft.com/en-US/data/jj591620

1 użytkowników online, w tym zalogowanych: 0, gości: 1