2015-10-30 3 views
0

Как преобразовать следующий запрос в выражение лямбда или LINQ?Как преобразовать этот запрос sql в выражение Lambda или LINQ

SELECT * FROM PrelevementClient as pc 
LEFT JOIN ContratIBAN AS ci ON ci.IDCMPT = pc.IDCMPT 
LEFT JOIN Contrat AS ctr ON ctr.NOCONTRAT = ci.NOCONTRAT 
WHERE pc.IDPRELEVEMENT = '111' 
AND DTPROCHAINPREL >= getdate() 

Сложность в том, что есть два левых соединения.

+0

Трудно ответить без наличия модели сущности (3 вовлеченных объекта и их отношения). –

ответ

0

После каждого 'присоединиться' есть 'от'.

Группирование всех «от» в конце запроса создает проблему.

DateTime date = DateTime.Now.AddMonths(1); 
     var prelevements = from pc in set.Where(s => s.DTPROCHAINPREL >= DateTime.Today && s.NOSOC == nosoc && s.DTPROCHAINPREL < date) 
          join ci in context.Set<ContratIBAN>().Where(g => g.PRELEVEMENTBCA == true) on pc.IDCMPT equals ci.IDCMPT into cileft 
          from ci in cileft.DefaultIfEmpty() 
          join co in context.Set<Contrat>() on ci.NOCONTRAT equals co.NOCONTRAT into coleft  
          from co in coleft.DefaultIfEmpty() 
0

Надеется, что это помогает:

var query = from pc in Context.PrelevementClient 
      join ci in Context.ContratIBAN on pc.IDCMPT equals ci.IDCMPT into ciLeft 
      from ci in ciLeft.DefaultIfEmpty() 
      join co in Context.Contrat on ci.nocontrat equals co.nocontrat into coLeft 
      from co in coLeft.DefaultIfEmpty() 
      where pc.idprelevement == "111" && pc.dtprochainprel >= DateTime.Today 
      select new 
      { 
       //bind what you want 
       // and dont forget to manage if co||ci.property is null... 
      } 
+0

Я думаю, что мы можем улучшить ответ, предоставив полный запрос. –

+1

Третья строка производит «CS0103 - имя« ci »не существует в текущем контексте» –

+0

Вы правы, я написал это быстро – RomainV

Смежные вопросы