2016-07-12 5 views
0

Ich versuche, eine Liste von Datensätzen nach Stunden zu gruppieren und die Anzahl der Datensätze für jede Stunde zu speichern. Hier ist mein Code:.NET beim Gruppieren von Datensätzen nach Stunden nicht möglich, Datetime in der Auswahl zu verwenden

 DateTime firstTimeStamp = myRecords.DataBaseRecords.First().TimeStamp; 
     Statistics = myRecords.DataBaseRecords 
     .GroupBy(x => x.TimeStamp.Hour) 
      .Select(group => new GraphModel() { Date =firstTimeStamp.AddHours(group.Key), Value = group.Count() }) 
     .ToList(); 

Das Problem ist, dass, wenn ich auf der Auswahl fuction bin, kann ich nicht Zugang zum Datetime mehr so ​​das Feld group.key einen Wert enthält zwischen 0 und 24 Ich brauche nur zu gruppiere alle Datensätze nach Stunden und für jede Stunde, ich brauche die Anzahl der Datensätze im Value-Parameter.

+0

Warum nicht? Was geschieht? – SLaks

+0

Es gibt tatsächlich keine Stunde mehr als 24, also wenn zum Beispiel das nächste Datum in 3days ist, wird es nicht 82hour zurückgeben, aber wird 0 zurückgeben:/ – KingOfBabu

+0

Was erwarten Sie davon? Wenn Sie eine Stunde benötigen, wird ein Wert zwischen 0 und 23 zurückgegeben. Das Datum ist ein separater Wert. –

Antwort

2

Sie gruppieren, um die Daten durch absolute Stunden ab dem ersten Zeitstempel, dh die Unterschiede in Stunden für jeden TimeStamp Wert berechnet:

Statistics = myRecords.DataBaseRecords 
         .GroupBy(x => DbFunctions.DiffHours(firstTimeStamp, x.TimeStamp) into g 
         .Select(g => new GraphModel 
         { 
          Date = g.FirstOrDefault().TimeStamp, 
          Value = g.Count() 
         }; 

Wenn dies auf Objekte Ebene LINQ (nicht Entity Framework) können Sie ersetzen ...

DbFunctions.DiffHours(firstTimeStamp, x.TimeStamp) 

... von

(x.TimeStamp - firstTimeStamp).TotalHours 

Wenn es LINQ to SQL ist, verwenden

SqlMethods.DateDiffHour(firstTimeStamp, x.TimeStamp) 
0

Vielleicht so etwas wie dies funktionieren kann für Sie:

DateTime myDateTime = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key).Ticks); 

Frage spezifisch oben zu beantworten:

...Date = new DateTime(DateTime.Parse(firstTimeStamp).AddHours(group.Key))... 
Verwandte Themen