【问题标题】:.Sum() in lambda expressions.Sum() 在 lambda 表达式中
【发布时间】:2014-10-28 18:23:41
【问题描述】:

我是 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..)

【问题讨论】:

  • 你能提供一些样本数据预期输出的数据吗?为什么要按Importe 分组?您肯定不想要所有具有特定值的Importe 值的总和吗?你在最后做一个ToList(),但是你抱怨它发回了一个完整的列表。仅凭此代码 sn-p,我们很难知道您真正想要什么。

标签: c# linq lambda linq-expressions


【解决方案1】:

一位朋友帮助我解决了这个问题,而加入就是答案。我想我没有足够清楚地解释我的问题,我试图这样做,但以一种更像 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);

【讨论】:

    【解决方案2】:

    当您使用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();
    

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多