Oto zapytań SQL chcę przekonwertować do EF4.3Konwersja LEFT OUTER JOIN Entity Framework
command = database.GetSqlStringCommand(@"
select
H.AUTHENTICATION_ID,
USERNAME,
PERMISSIONS,
ORGANIZATION_IDENTIFIER,
O.ORGANIZATION_ID
from
AUTHENTICATION H
left join [AUTHORIZATION] T on H.AUTHENTICATION_ID=T.AUTHENTICATION_ID
join ORGANIZATION O on O.ORGANIZATION_ID = T.ORGANIZATION_ID
order by H.AUTHENTICATION_ID");
Oto najlepszy LINQ mogę wymyślić:
var query = from h in context.Authentications
join t in context.Authorizations on h.AuthenticationId equals t.Authentications.AuthenticationId
join o in context.Organizations on t.Organizations.OrganizationId equals o.OrganizationId
orderby
h.AuthenticationId
select new
{ AUTHENTICATION_ID = (Int16?)h.AuthenticationId,
h.Username,
t.Permissions,
o.OrganizationIdentifier,
OrganizationID = (Int16?)o.OrganizationId
};
I wiem, że muszę połączyć moje pierwsze sprzężenie (między autoryzacjami & Uwierzytelnianie) w, powiedzmy x i zastosuj DefaultIfEmpty, ale nie mogę odczytać składni.
EDIT: Obraz dla wyjaśnienia:
Każda pomoc będzie bardzo mile widziane. Pozdrowienia.
Dzięki za szczegóły. Załączam obraz do mojego pytania. Prosimy o sprawdzenie, czy to wyjaśnia moją sytuację. Dzięki za odpowiedź. Bardzo doceniane. – DoomerDGR8
Biorąc pod uwagę obraz, myślę, że LINQ, który zamieściłem, zadziała. Otrzymasz wszystko od tabeli Uwierzytelnień, a także wszelkie pasujące autoryzacje (jeśli takie istnieją) dla tych Uwierzytelnień oraz wszelkie pasujące Organizacje dla tych Uwierzytelnień. –
Jedna drobna aktualizacja, której możesz potrzebować: jak napisałem, moja odpowiedź zwróci autoryzacje, które nie mają pasujących rekordów organizacji - drugie połączenie lewostronne zamiast wewnętrznego. W zależności od modelu danych, który może, ale nie musi, musisz się martwić; jeśli to jest problem, daj mi znać. –