فرض کنید دو جدول پرسنل و شهر را در دیتا بیس خود دارید و 2 بار کد شهر در جدول پرسنل ارتباط داده شده که یکی برای محل تولد و دیگری برای محل صدور
و میخواهید توسط outer join لیست تمامی پرسنل و محل تولد و محل صدور را (در صورت وجود) داشته باشید.
در sql گرفتن نتیجه ذکر شده بصورت زیر به راحتی قابل انجام است
SELECT dbo.tbl_Personnel.ID, dbo.tbl_Personnel.FirstName, dbo.tbl_Personnel.LastName, dbo.tbl_GeographyPosition.Title AS IssuanceLocation, tbl_GeographyPosition_1.Title AS BirthLocation FROM dbo.tbl_Personnel LEFT OUTER JOIN dbo.tbl_GeographyPosition AS tbl_GeographyPosition_1 ON dbo.tbl_Personnel.BirthLocationGeographyPositionID = tbl_GeographyPosition_1.ID LEFT OUTER JOIN dbo.tbl_GeographyPosition ON dbo.tbl_Personnel.IssuanceLocationGeographyPositionID = dbo.tbl_GeographyPosition.ID
اما در ef با توجه به خواص راهبریکمتر از join استفاده میکنیم در ضمن به هیچ وجه از Left Outer Join و Right Outer Join استفاده نمیشود و باید کوئری فوق را با کد زیر شبیه سازی کرد
var contex = new PersonnelEntities(); var Query = from Personnel in contex.tbl_Personnel join IssuanceLocation in contex.tbl_GeographyPosition on Personnel.IssuanceLocationGeographyPositionID equals IssuanceLocation.ID into AIssuanceLocation from IL in AIssuanceLocation.DefaultIfEmpty() join BirthLocation in contex.tbl_GeographyPosition on Personnel.BirthLocationGeographyPositionID equals BirthLocation.ID into ABirthLocation from BL in ABirthLocation.DefaultIfEmpty() //where select new { Personnel.ID, Personnel.FirstName, Personnel.LastName, IssuanceLocation = IL.Title, BirthLocation = BL.Title };