Linq to Entities - левый Outer Join

Не могли бы вы помочь мне разобраться в этом? Мне нужно заменить соединение с таблицей OSLP на соединение OUTER. Кажется немного сложным для тех, кто не является экспертом в Linq для сущностей. Как мне это сделать?

var surgeonList = (
 from item in context.T1_STM_Surgeon
 .Include("T1_STM_SurgeonTitle")
 .Include("OTER")
 where item.ID == surgeonId
 join reptable in context.OSLP 
 on item.Rep equals reptable.SlpCode
 select new
 {
 ID = item.ID,
 First = item.First,
 Last = item.Last,
 Rep = reptable.SlpName,
 Reg = item.OTER.descript,
 PrimClinic = item.T1_STM_ClinicalCenter.Name,
 Titles = item.T1_STM_SurgeonTitle,
 Phone = item.Phone,
 Email = item.Email,
 Address1 = item.Address1,
 Address2 = item.Address2,
 City = item.City,
 State = item.State,
 Zip = item.Zip,
 Comments = item.Comments,
 Active = item.Active,
 DateEntered = item.DateEntered
 }).ToList();

Спасибо заранее!

1 ответ

Синтаксис следующий и дайте мне знать, если у вас возникли проблемы с переводом кода. Generic Outer Join (объединение групп):

var query =       из l в левом

join r in right
 on l.ID
 equals l.right.ID into groupedJoin
 select new
 {
 ID= l.ID,
 OuterJoined= groupedJoin.Select(r=> right)
 };

Ваш результат - все в левом, даже если право не существует.

Очевидно, я не могу гарантировать, что он скомпилируется, но он будет выглядеть следующим образом:

var surgeonList = (

from item in context.T1_STM_Surgeon
 .Include("T1_STM_SurgeonTitle")
 .Include("OTER")
 where item.ID == surgeonId
 join reptable in context.OSLP 
 on item.Rep equals reptable.SlpCode into groupedJoin
 select new
 {
 ID = item.ID,
 First = item.First,
 Last = item.Last,
 Rep = reptable.SlpName,
 Reg = item.OTER.descript,
 PrimClinic = item.T1_STM_ClinicalCenter.Name,
 Titles = item.T1_STM_SurgeonTitle,
 Phone = item.Phone,
 Email = item.Email,
 Address1 = item.Address1,
 Address2 = item.Address2,
 City = item.City,
 State = item.State,
 Zip = item.Zip,
 Comments = item.Comments,
 Active = item.Active,
 DateEntered = item.DateEntered
 OSLP = groupedJoin.Select(x=>WHATEVERYOUNEED)
}).ToList();

И вам просто нужно заменить groupedJoin.Select(x = > WHATEVERYOUNEED) либо выбором чего-то, либо простым .ToList

licensed under cc by-sa 3.0 with attribution.