2009-10-21 9 views
1

Comment refactoriseriez-vous ce code par rapport au LINQ? Je suis nouveau à LINQ et je n'ai pas assez bien maîtrisé les requêtes plus complexes (imbriquées, groupées).Aide au refactoring LINQ requise

Est-ce que toutes ces trois instructions et la boucle foreach peuvent être converties en une instruction 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); 
     } 
    } 
} 

Répondre

1

Voici mon premier coup. Dur sans avoir votre modèle.

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

besoin probablement ajouter Date = g.Key à la sélection. – dahlbyk

+0

Oui, merci dahlbyk –