简体   繁体   English

带有Lambda表达式的LINQ-连接,分组依据,总和和计数

[英]LINQ with Lambda expression - Join, Group By, Sum and Count

How can I "translate" this SQL query to Linq Lambda Expression: 如何将该SQL查询“翻译”为Linq Lambda Expression:

    SELECT  BN.DEUF, 
            BN.DESUPERINTENDENCIAREGIONAL,
            CR.SITUACAODIVIDA, 
            COUNT(CR.VLEFETIVAMENTELIBERADO), 
            SUM(CR.VLEFETIVAMENTELIBERADO)
   FROM BENEFICIARIO BN
   JOIN CREDITO CR ON BN.CDBENEFICIARIO = CR.CDBENEFICIARIO
   GROUP BY BN.DEUF,BN.DESUPERINTENDENCIAREGIONAL, CR.SITUACAODIVIDA
   ORDER BY BN.DEUF

Until now I have: 到目前为止,我有:

var itens = db.CREDITO
            .Join(db.BENEFICIARIO, cr => cr.CDBENEFICIARIO, bn => bn.CDBENEFICIARIO,
                                (cr, bn) => new { cr, bn })
            .GroupBy(cr => cr.VLEFETIVAMENTELIBERADO)
            .Select(g => new { VLTOTAL = g.Sum(x => x.VLEFETIVAMENTELIBERADO) })
            .ToList();

You just don't do the same group by in your sql and your linq. 您只是不在sql和linq中进行相同的分组。

So... let's do it ! 所以...开始吧!

var itens = db.CREDITO
            .Join(db.BENEFICIARIO, cr => cr.CDBENEFICIARIO, bn => bn.CDBENEFICIARIO,(cr, bn) => new { cr, bn })
            .GroupBy(x=> new{x.bn.DEUF,x.bn.DESUPERINTENDENCIAREGIONAL, x.cr.SITUACAODIVIDA})
            .Select(g => new { 
                       g.Key.DEUF,
                       g.Key.DESUPERINTENDENCIAREGIONAL,
                       g.Key.SITUACAODIVIDA,
                       VLTOTAL = g.Sum(x => x.cr.VLEFETIVAMENTELIBERADO),
                       Count = g.Count() 
                       })
            .ToList();

You will have to create an anonymous type in Group By clause to group by multiple columns. 您将必须在Group By子句中创建一个匿名类型以按多列分组。 This should work:- 这应该工作:

var itens = db.CREDITO
            .Join(db.BENEFICIARIO, cr => cr.CDBENEFICIARIO, bn => bn.CDBENEFICIARIO,
                                (cr, bn) => new { cr, bn })
            .GroupBy(x => new { 
                                  x.cr.SITUACAODIVIDA, 
                                  x.bn.DEUF, 
                                  x.bn.DESUPERINTENDENCIAREGIONAL 
                              }
             )
            .Select(g => new { 
                                 DEUF = g.Key.DEUF,
                                 SITUACAODIVIDA = g.Key.SITUACAODIVIDA,
                                 VLTOTAL = g.Sum(z => z.cr.VLEFETIVAMENTELIBERADO),
                                 Count = g.Count()
                             }
                   ).ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM