如何将此sql请求转换为Lambda表达式或LINQ(How to convert this sql request to Lambda expression or LINQ)
如何将以下查询转换为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()困难在于有两个左连接。
How can I convert the following query to a lambda expression or to 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()The difficulty is that there are two left joins.
最满意答案
希望能帮助到你:
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... }After each 'join' there is a 'from'.
Grouping all 'from' at the end of the request generates an issue.
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()更多推荐
发布评论