這裏是一個SQL查詢我要轉換爲EF4.3轉換一個LEFT OUTER JOIN到實體框架
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");
這裏是最好的LINQ我能想出:
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
};
我知道我需要合併我的第一次加入(授權&身份驗證)到,讓我們說x和應用DefaultIfEmpty,但不能說出語法。
編輯:圖片澄清:
任何幫助將得到高度讚賞。問候。
感謝您的詳細信息。我在我的問題中附上了一張圖片。請看看它是否澄清我的情況。感謝回覆。非常感激。 – DoomerDGR8 2012-03-01 05:50:40
鑑於圖像,我認爲我發佈的LINQ將工作。它將爲您提供來自Authentications表的所有內容,以及此認證的任何匹配授權(如果有的話)以及任何與這些認證相匹配的組織。 – 2012-03-01 14:39:27
您可能需要的一個小的更新:按照書面答案,我的答案將返回沒有匹配組織記錄的授權 - 第二個左連接而不是內連接。根據您的數據模型,可能或不可能您需要擔心;如果這是一個問題,請告訴我。 – 2012-03-01 14:46:42