Как преобразовать следующий запрос в лямбда-выражение или в 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
sadzag 30 Окт 2015 в 12:49

2 ответа

Лучший ответ

После каждого «соединения» стоит «от».

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

 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
sadzag 2 Ноя 2015 в 10:39

Надеюсь, это поможет:

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
RomainV 30 Окт 2015 в 14:00