2009-08-31 10 views
3

suivante requête SQL fonctionne et obtient les visites par jour pour le mois en coursconvertir une requête SQL pour Entity Framework

select date(date) as DayDate, count(*) As visitsaday from Visits group by DayDate having DayDate between date('now','start of month') and date('now','start of month','+1 month','-1 day') 

Pour les jours j'essaie de comprendre comment obtenir un fonctionnement avec le cadre de l'entité. Mon meilleur aproche jusqu'à présent ist ceci:

ObjectQuery<Visit> visits = fitent.VisitMenge; 
       var uQuery = 
        from visit in visits 
        group visit by visit.Date into g 
        select new 
        { 
         DayOfMonth = g.Key, 
         VisitsPerDay = g.Count() 
        }; 

Le problème est ici, qu'il sera groupé par date + heure au lieu de simplement la date. Un résultat est comme:

[0] = { DayOfMonth = {06.07.2009 12:38:59}, VisitsPerDay = 1 } 

mais il devrait ressembler à

[0] = { DayOfMonth = {06.07.2009}, VisitsPerDay = 12 } 
  • Comment le format de date changée, ce qui est utilisé pour le regroupement?
  • Comment filtrer Juste les jours du mois en cours comme dans la requête SQL?

Répondre

2

Pouvez-vous faire:

ObjectQuery<Visit> visits = fitent.VisitMenge; 
var uQuery = from visit in visits 
      group visit by visit.Date.Day into g 
      select new 
      { 
       DayOfMonth = g.Key, 
       VisitsPerDay = g.Count() 
      }; 

Ajoutez juste un .Day à votre "visit.Date" - ce que ça marche ??

Marc

2

Vous devez faire deux choses:

  • Limiter les résultats à la date d'un
  • Faire JourDuMois juste la date et non la pleine DateTime

-

var uQuery = from visit in visits 
      where visit.Date.Month == DateTime.Now.Month 
       && visit.Date.Year == DateTime.Now.Year 
      group visit by visit.Date into g 
      select new 
      { 
       DayOfMonth = g.Key.Date, 
       VisitsPerDay = g.Count() 
      }; 
2

J'utilise maintenant ce qui suit:

ObjectQuery<Visit> visits = fitent.VisitMenge; 
       var uQuery = 
        from visit in visits 
        where visit.Date.Value.Month == DateTime.Now.Month 
       && visit.Date.Value.Year == DateTime.Now.Year 
        group visit by visit.Date.Value.Day into g 
        select new 
        { 
         DayOfMonth = g.Key, 
         VisitsPerDay = g.Count() 
        }; 

Les solutions proposées fonctionne très bien ensemble!

je devais changer juste un peu Litle

au lieu de visit.Date.Day je devais:

visit.Date.Value.Day 

J'ai maintenant un résultat comme:

[0] = { DayOfMonth = 6, VisitsPerDay = 3 } 

Je vous remercie !

+0

dont vous parlez? – naspinski