【问题标题】:linq query Sum and group bylinq查询总和和分组依据
【发布时间】:2015-10-08 19:06:12
【问题描述】:

我需要 linq 查询方面的帮助,SQL 是

select usuario2.PkUsuarioId, sum (evento.EventoHora) as total
from TUsuario as usuario, TUsuario as usuario2, TEvento as evento
where usuario.PkUsuarioId = 2 
and usuario.PkUsuarioId = usuario2.Fkusuario_UsuarioAdminId 
and usuario2.PkUsuarioId = evento.FkEvento_UsuarioId
group by (usuario2.PkUsuarioId)

结果:

我在 Linq 查询中需要这个 SQL,我试过这个 Linq 查询

from usuario in TUsuario
from usuario2 in TUsuario
from evento in TEvento
where usuario.PkUsuarioId == 2
&& usuario.PkUsuarioId == usuario2.FkUsuario_UsuarioAdminId
&& usuario2.PkUsuarioId == evento.FkEvento_UsuarioId
group usuario2 by usuario2.PkUsuarioId into value
select new {value.Key, suma = TEvento.Sum(x => x.EventoHora)}

结果:

为什么 linq 查询在所有行中抛出 50?

【问题讨论】:

  • 你可能应该使用连接或者如果可能的话检查导航属性。

标签: c# sql-server asp.net-mvc linq linqpad


【解决方案1】:

你是在总结领域,而不是你的团队。

TEvento.Sum(x => x.EventoHora) 更改为 value.Sum(x => x.EventoHora) value.Select(x => x.EventoHora).Sum()

编辑:感谢@juharr

【讨论】:

  • 或者只是value.Sum(x => x.EventoHora)
  • 如果我更改为“suma = value.Sum(x => x.EventoHora)”,编译器会显示此错误:“当前上下文中不存在名称‘值’”。 “价值”是什么意思。 @JB06
  • @ernestopetit 这没有任何意义,因为它也会抱怨value.Key
  • value 是查询中分配给组的名称
【解决方案2】:

问题是您对整个表而不是组求和,并且您对usuario2 而不是evento 进行分组。如果可能,您还应该尝试使用导航属性。根据您的实体,它应该看起来像这样。

from usuario in TUsuario
from usuario2 in usuario.TUsuarios
from evento in usuario2.TEventos
where usuario.PkUsuarioId == 2
group evento by usuario2.PkUsuarioId into grp
select new 
{
    grp.Key, 
    suma = grp.Sum(x => x.EventoHora)
}

【讨论】:

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