lambda表达式中的.Sum()

本文关键字:Sum 表达式 lambda | 更新日期: 2023-09-27 18:28:20

我是lambda表达式的新手。我正在尝试使用.Sum()方法来处理数据库搜索的结果,我想对Importe列中的所有值求和,我正在使用另一个表中的ID来选择值,但Json会将每个值的整个列表发送给我,它不会进行求和。或者我不知道如何应用它?

谢谢

public JsonResult IngresaCuentas(string codigo)
{
    ContextoAngeles db = new ContextoAngeles();
    var suma = (from data in db.Cuentas
                where data.Codigo == codigo
                select (from n in db.MovimientosPolizas
                        where data.Id == n.IdCuenta
                        group n by new { n.Importe} into g
                        let sumaTotal = (g.Sum(n => n.Importe))
                        select new
                        {
                            Total: sumaTotal
                        })).ToList();
        return Json(suma, JsonRequestBehavior.AllowGet);
}

我在控制台上得到了这个:

[[{"Total":0},{"Total":20},{"Total":150},{"Total":330},{"Total":56.2},{"Total":240},{"Total":1750},{"Total":70.07},{"Total":480},{"Total":540},{"Total":95},{"Total":200},{"Total":108},{"Total":108.8},{"Total":880},{"Total":111.98},{"Total":115},{"Total":240},{"Total":125},{"Total":129.98},{"Total":780},{"Total":131.42},{"Total":134.59},{"Total":1260},{"Total":141.65},{"Total":145}]] (and a lot more..)

lambda表达式中的.Sum()

一位朋友帮我解决了这个问题,Join就是答案。我想我没有足够清楚地解释我的问题,我试图这样做,但用一种不同的方式,更像SQL语法,如果有人知道一个学习lambda表达式的好地方,那就太好了。

谢谢大家!这里是解决方案。

 var dato = db.Cuentas.Where(x => x.Codigo == codigo)
                .Join(db.MovimientosPolizas, cuentas => cuentas.Id, movimientos => movimientos.IdCuenta, (cuenta, movimiento) => new { sumImporte = movimiento.Importe, cuenta = cuenta.Nombre })
                .Sum(x => x.sumImporte);

当您使用select new { Total: sumaTotal }时,这不仅仅是发回int,而是向您发送一个带有Total字段的匿名类型的对象。我不认为这就是你要追求的。

我认为你应该做的是这样的事情:

var suma = (from data in db.Cuentas
            where data.Codigo == codigo
            select (from n in db.MovimientosPolizas
                    where data.Id == n.IdCuenta
                    group n by new { n.Importe} into g
                    let sumaTotal = (g.Sum(n => n.Importe))
                    select sumaTotal)).ToList();

或者,如果您要选择您查询的每个Importe的总和:

var suma = (from data in db.Cuentas
            where data.Codigo == codigo
            select (from n in db.MovimientosPolizas
                    where data.Id == n.IdCuenta
                    group n by new { n.Importe} into g
                    let sumaTotal = (g.Sum(n => n.Importe))
                    select sumaTotal)).Sum();