2009-10-21 7 views
1

LINQ와 관련하여 어떻게이 코드를 리팩터링 하시겠습니까? 나는 LINQ에 익숙하지 않고보다 복잡한 쿼리 (중첩, 그룹화)를 잘 처리하지 못했다.LINQ 리팩터링 도움이 필요합니다

이러한 세 가지 문과 foreach 루프가 모두 하나의 LINQ 문으로 변환 될 수 있습니까?

void AddSeries(Series series, int phraseId) 
{ 
    using (var db = Database.Instance) 
    { 
     foreach (var date in db.Ad.Select(ad => ad.DateTime.Date).Distinct()) 
     { 
      var phraseCount = (from pc in db.PhraseCount 
           where pc.DateTime.Date == date && 
            pc.PhraseId == phraseId 
           select pc.Count).SingleOrDefault(); 

      var adCount = db.Ad.Where(ad => ad.DateTime.Date == date).Count(); 

      series.Add(date, phraseCount/adCount); 
     } 
    } 
} 

답변

1

다음은 첫 번째 사진입니다. 귀하의 모델을 가지고 있지 않고도 열심히.

var q = from ad in db.Ad 
     group ad by ad.DateTime.Date into g 
     select new 
     { 
      AdCount = g.Count(), 
      Date = g.Key, 
      PhraseCount = (from pc in db.PhraseCount 
          where pc.DateTime.Date == g.Key 
           && pc.PhraseId == phraseId 
          select pc).Count() 
     } 
+1

아마 Date = g.Key를 선택 항목에 추가해야합니다. – dahlbyk

+0

예, 감사합니다. dahlbyk –

관련 문제