linq查询Sum和group by

时间:2015-10-08 19:06:12

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

我需要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)

结果:

enter image description here

我在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)}

结果:

enter image description here

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

2 个答案:

答案 0 :(得分:1)

你正在总结这个领域,而不是你的小组。

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

编辑:谢谢@juharr

答案 1 :(得分:0)

问题在于,您在整个表格而不是群组中进行求和,而您正在对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)
}