Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将此T-SQL转换为lambda表达式(组和和和)_C#_Linq_Lambda - Fatal编程技术网

C# 如何将此T-SQL转换为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

看在上帝的份上,有人帮帮我。。。我花了一上午的时间试着学习linq和lambda的表达方式,但我仍然无法得到我所需要的

我有一个疑问:

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()
                };