2017-01-23 6 views
0

Я пытаюсь сделать «LEFT JOIN».Left Join Entity Framework не работает

Однако, только когда у меня есть информация «в обеих таблицах», команда возвращает что-то.

пыльника моей функции

public IList<ClientWorkFlowReadModel> GetWorkFlow(int idClient) 
       { 
        try 
        { 
         using (GvisaContext db = new GvisaContext()) 
         { 
          //Disable de proxy tracking for prevent error in json convertion 
          db.Configuration.ProxyCreationEnabled = false; 

          var clientServiceWorkFlows = db.ServicesWorkFlow 
           .Join(db.ClientsServicesWorkFlow, 
             swf => swf.IdServiceWorkFlow, 
             cswf => cswf.IdServiceWorkFlow, 
             (swf, cswf) => 
           new { swf, cswf }) 
           .Select(x => new ClientWorkFlowReadModel { 
            Title = x.swf.Title, 
            IdClient = x.cswf.IdClient, 
            IdService = x.swf.IdService, 
            IdClientServiceWorkFlow = x.cswf.IdClientServiceWorkFlow, 
            Description = x.swf.Description, 
            Active = x.swf.Active, 
            DateUpdate = x.cswf.DateUpdate 
            } 
           ).Where(y => y.IdClient == idClient).ToList(); 

          return clientServiceWorkFlows; 
         } 
        } 
        catch (Exception ex) 
        { 
         throw ex; 
        } 

мне нужно сделать, это:

SELECT * FROM dbo.Clients z 
INNER JOIN dbo.ClientsServices y on y.idClient=z.idClient 
INNER JOIN dbo.ServicesWorkFlow a on a.IdService=y.IdService 
LEFT JOIN ClientsServicesWorkFlow b on b.IdClientServiceWorkFlow=a.IdServiceWorkFlow 
WHERE z.IdClient=3 

спасибо !!!

+0

При работе с EF, [Не использовать Linq Регистрация. Перейдите!] (Https://coding.abel.nu/2012/06/dont-use-linqs-join-navigate/) –

ответ

1
 var clientServiceWorkFlows = (from z in db.Clients 
    join y in db.ClientsServices on z.idClient equals y.idClient 
    join a in db.ServicesWorkFlow on y.IdService equals a.IdService 
    join ClientsServicesWorkFlow b on a.IdServiceWorkFlow equals b.IdClientServiceWorkFlow into g 
    from x in g.DefaultIfEmpty()).Select([... what you want] 
           ).Where(y => y.IdClient == idClient).ToList(); 

Попробуйте вышеуказанное. Дайте мне знать, если это сработает.

Ссылка для левых соединений в сущности, используя DefaultIfEmpty, Entity framework left join

+0

Выводит ошибку в DefaultIfEmpty –

+0

@AlexPereiraMahmud Какая ошибка? Вы импортировали linq? –

+0

Я всегда получаю ошибку «Тело запроса должно заканчиваться предложением select или группой предложений», –