繁体   English   中英

LINQ查询求和和分组

[英]linq query Sum and group by

我需要有关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?

您正在汇总字段,而不是您的组。

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

编辑:谢谢@juharr

问题是,你正在总结整个表,而不是群体,你是在分组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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM