C# - LINQ - 从其他表中求和一个字段

时间:2017-03-31 14:22:40

标签: c# .net linq group-by sum

我需要加入两个表(Movimientos和Cuentas),由CuentasId组合并制作Movimientos.Monto的SUM Movimientos有一个CuentasId加入这个,我可以从Cuentas获得数据,但不能得到Sum。

这是我最好的方法,任何帮助都会得到预防,我对语法有点困惑。在此先感谢并亲切的问候,

          var cuentas = (from mov in _data.Movimientos
                               join ct in _data.Cuentas
                               on mov.CuentasId equals ct.CuentasId
                               where ct.IsDeleted == 0 && mov.IsDeleted == 0
                               group ct by new
                               {
                                   CuentasId = ct.CuentasId,
                                   Alias = ct.Alias,
                                   Moneda = ct.Monedas.Nombre,
                                   Signo = ct.Monedas.Signo,
                                  Banco = ct.Bancos.Nombre
                               } into ctg
                               select new
                               {
                                   Alias = ctg.Key.Alias,
                                   Moneda = ctg.Key.Moneda,
                                   Signo = ctg.Key.Signo,
                                   Banco = ctg.Key.Banco,
                                   Monto = ctg.Sum(mov.Monto)
                               }
                                ).ToList();

2 个答案:

答案 0 :(得分:2)

你需要像这样对你要求的值进行分组

group mov.Monto by new { ..... } into ctg

然后ctg将是按mov.Monto属性列表分组的ct个值的集合,您只需在Sum上调用ctg即可你的select

Monto = ctg.Sum()

所以你的新查询将是

var cuentas = (from mov in _data.Movimientos
               join ct in _data.Cuentas
               on mov.CuentasId equals ct.CuentasId
               where ct.IsDeleted == 0 && mov.IsDeleted == 0
               group mov.Monto by new
               {
                   CuentasId = ct.CuentasId,
                   Alias = ct.Alias,
                   Moneda = ct.Monedas.Nombre,
                   Signo = ct.Monedas.Signo,
                   Banco = ct.Bancos.Nombre
               } into ctg
               select new
               {
                   Alias = ctg.Key.Alias,
                   Moneda = ctg.Key.Moneda,
                   Signo = ctg.Key.Signo,
                   Banco = ctg.Key.Banco,
                   Monto = ctg.Sum()
               }).ToList();

答案 1 :(得分:0)

您也可以先尝试分组,然后再对项目进行总结:

xs:boolean