C# 如何将此T-SQL转换为lambda表达式(组和和和)
看在上帝的份上,有人帮帮我。。。我花了一上午的时间试着学习linq和lambda的表达方式,但我仍然无法得到我所需要的 我有一个疑问:C# 如何将此T-SQL转换为lambda表达式(组和和和),c#,linq,lambda,C#,Linq,Lambda,看在上帝的份上,有人帮帮我。。。我花了一上午的时间试着学习linq和lambda的表达方式,但我仍然无法得到我所需要的 我有一个疑问: select IDHOLDINGGRUPO, IDUNIDADE, IDOPERADORA, ANOPROC, MESPROC, DATACONHECIMENTO, TIPO, sum(VALOR) as TOTAL from VIEW_EVENTOS_ATENDIMENTOS group by IDHOLDINGGRUPO, IDUNIDADE, IDOPER
select IDHOLDINGGRUPO, IDUNIDADE, IDOPERADORA, ANOPROC, MESPROC, DATACONHECIMENTO, TIPO, sum(VALOR) as TOTAL
from VIEW_EVENTOS_ATENDIMENTOS
group by IDHOLDINGGRUPO, IDUNIDADE, IDOPERADORA, ANOPROC, MESPROC, DATACONHECIMENTO, TIPO
这将返回以下结果:
IDHOLDING IDUNIDADE IDOPERADORA ANOPROC MESPROC DATACONHECIMENTO TIPO TOTAL
1 1 1 2001 1 2001-01-01 A 150.00
1 2 1 2001 1 2001-01-01 A 300.00
我试图用lambda表达式得到相同的结果。比如:
var Resultado = lista
.GroupBy(x => new { x.HoldingGrupoDto.Id, Id2 = x.UnidadeDto.Id, Id3 = x.OperadoraDto.Id, x.DataConhecimento, x.AnoProc, x.MesProc })
.Select(group => group.Sum(item => item.Valor)).FirstOrDefault() ?? default(double);
但这只返回sum列。如何获得与上述示例完全相同的所有列。您需要将所需的所有列包含到
中。选择如下所示:
...
.Select(group => new {group.Id, group.Id2, SumValor = group.Sum(item => item.Valor), ...})
...
您的投影(。选择
)正确。您应该向对象添加额外的属性:
var Resultado = lista.GroupBy(x => new { Id1 = x.HoldingGrupoDto.Id, Id2 = x.UnidadeDto.Id, Id3 = x.OperadoraDto.Id, x.DataConhecimento, x.AnoProc, x.MesProc })
.Select(group => new {
Key = group.Key,
Valor = group.Sum(item => item.Valor)
}).FirstOrDefault();
更好的写作方法是:
var Resultado = lista.GroupBy(key => new { Id1 = key.HoldingGrupoDto.Id, Id2 = key.UnidadeDto.Id, Id3 = key.OperadoraDto.Id, key.DataConhecimento, key.AnoProc, key.MesProc },
item => item.Valor)
.Select(g => new {
g.Id1,
g.Id2,
g.Id3,
g.DataConhecimento,
g.AnoProc,
g.MesProc,
Valor = g.Sum()
}).FirstOrDefault();
但IMO在这种情况下使用查询语法看起来更简洁:
var resultAdo = from x in lista
group x.Valor by new { Id1 = x.HoldingGrupoDto.Id, Id2 = x.UnidadeDto.Id, Id3 = x.OperadoraDto.Id, x.DataConhecimento, x.AnoProc, x.MesProc } into g
select new {
g.Id1,
g.Id2,
g.Id3,
g.DataConhecimento,
g.AnoProc,
g.MesProc,
Valor = g.Sum()
};