【问题标题】:LINQ with Lambda expression - Join, Group By, Sum and Count带有 Lambda 表达式的 LINQ - 连接、分组、求和和计数
【发布时间】:2015-11-19 12:14:52
【问题描述】:

如何将此 SQL 查询“翻译”为 Linq Lambda 表达式:

    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

到目前为止,我有:

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();

【问题讨论】:

    标签: c# sql linq lambda


    【解决方案1】:

    你只是不要在你的 sql 和你的 linq 中做同样的分组。

    所以...让我们开始吧!

    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();
    

    【讨论】:

    • 效果很好!只需要调整VLTOTAL = g.Sum(x => x.cr.VLEFETIVAMENTELIBERADO)...
    • 如果我需要选择其他不用于分组的列怎么办?
    • @WedadShurrab 列必须在聚合函数(sum、max、avg...)中,或者在 group by 子句中。
    【解决方案2】:

    您必须在Group By 子句中创建一个匿名类型以按多列分组。这应该有效:-

    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();
    

    【讨论】:

    • 也像一个魅力!非常感谢! ;)
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多