2017-10-13 1 views
0

하나님의 도움으로 누군가 ... 나는 아침마다 linq 및 lambda 식을 배우려고 노력했지만 필요한 것은 얻을 수 없습니다. . 저에게이 결과를 반환이 T-SQL을 람다 식으로 변환하는 방법 (그룹 및 합)

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  

나는이 쿼리가 있습니다. 다음과 같음 :

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

그러나이 경우에만 합계 열이 반환됩니다. 위의 예와 완전히 똑같은 모든 열을 얻는 방법.

답변

1

귀하의 투사 (.Select는) 올바른입니다. 이 것

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

당신은 당신이이처럼 .Select에 필요한 모든 열을 포함해야합니다

... 
    .Select(group => new {group.Id, group.Id2, SumValor = group.Sum(item => item.Valor), ...}) 
...