2014-06-05 4 views
1

여기 linq있는 http://sqlfiddle.com/#!6/a1c8d/2 SQL 변환하려면 노력하고있어. 예상 결과는 sqlfiddle에 있지만, LINQ는 더 많은 행을 반환합니다.Linq C# 그룹화 합계

추 신 : sqlfiddle에서 오염을 증가시키지 않고 필드를 줄여서 내 문제에 집중하십시오.

resultado.Dados = 
    (
     from a in db.AgendaHorario 
     join b in db.Agenda on a.AgendaID equals b.AgendaID        
     select new 
     { 
      a.AgendaID, 
      Horario = a.Horario, 
      Controle = a.Controle, 
      Cor = b.Cor, 
      Agenda = b.Sigla        
     }).AsEnumerable() 
     .GroupBy(g => new 
     {   
      g.AgendaID, 
      Horario = g.Horario.ToString("dd/MM/yyyy"), 
      Data = g.Horario.ToString("yyyy-MM-dd"), 
      g.Controle, 
      g.Agenda, 
      g.Cor 
     })       
     .Select(s => new 
     { 
      id = s.Key.AgendaID, 
      title = s.Key.Agenda,        
      start = s.Key.Data,        
      color = String.IsNullOrEmpty(s.Key.Cor) ? "3a87ad" : s.Key.Cor, 
      className = "", 
      someKey = 1, 
      allDay = false,        
      Resultado0 = s.Sum(m => m.Controle == "L" ? 1 : 0).ToString(), 
      Resultado1 = s.Sum(m => m.Controle == "B" ? 1 : 0).ToString()        
     }); 
+0

귀하의 피들은 LINQ 쿼리와 유사하지 않습니다. 피들에 모든 것을 올리셨습니까? –

+2

왜 .AsEnumerable 뒤에 그룹을 만들겠습니까? 왜 당신의 쿼리에서'DateTime.ToString()'을 사용하고 뷰 레이어가 아닌가? Date 부분 만 가져 오려고한다면'EntityFunction.TruncateDate' 사용을 고려하십시오 ... – Aron

답변

1

의견에 따라 Linq에서 SqlFiddle을 반복하는 방법에 대한 질문을 해결합니다. String Date에 대한 투영은 Sql로 직접 변환 될 수 없으므로 AsEnumerable()으로 초기 화해야했습니다 (실제 쿼리에서 구체화하기 전에 필터를 적용하십시오!). SqlFunctions을 사용하여 날짜 부분 만 그룹화 할 수 있습니다. SqlFunctions.DatePart의 3 x 응용 프로그램을 사용하면 dd, MM 및 YYYY로 그룹화 할 수 있습니다.

var dados = db.AgendaHorarios1 
    .AsEnumerable() 
    .GroupBy(ah => ah.Horario.ToString("dd/MM/yyyy")) 
    .Select(g => new {Horario = g.Key, 
        Livre = g.Count(x => x.Controle == "L"), 
        Bloq = g.Count(x => x.Controle == "B"), 
        Aged = g.Count(x => x.Controle == "A")}); 
+0

... 아니면 EF 6을 가지고 있다면 Aron의 코멘트에 따라'EntityFunction.TruncateDate'를 사용하십시오. L/A/B의 각 행을 0 또는 1로 매핑 한 다음 Summing은 'Controle'값의 일치를 계산하는 것과 같습니다. – StuartLC