2016-05-26 1 views
-1

Ich habe eine SQL-Abfrage, aber was wäre das Äquivalent in C# LINQ?Linq Äquivalent für das Zählen von Datensätzen nach Datum und Uhrzeit

SELECT CAST(DateAdded as date) AS ForDate, 
     DATEPART(hour,DateAdded) AS OnHour, 
     COUNT(*) AS Totals 
FROM [TABLE1].[dbo].[PartValues] 

GROUP BY CAST(DateAdded as date), 
     DATEPART(hour,DateAdded) 
     Order by ForDate Desc, 
     OnHour Desc 

Die Idee ist, Aufzeichnungen nach Datum und Stunde- wie diese zu zählen:

ForDate OnHour Totals 
2016-05-25 9 36 
2016-05-25 8 60 
2016-05-25 7 70 
2016-05-25 6 12 
2016-05-24 21 24 
2016-05-24 20 72 
2016-05-24 19 24 
2016-05-24 14 120 
+0

Was ist die Art von 'DateAdded'? Terminzeit? –

+0

Warum versuchen Sie, eine SQL-Anweisung in eine LINQ-Anweisung umzuwandeln? Versuchen Sie, LINQ TO SQL zu verwenden oder nur nach der Logik zu suchen? Wo sind deine C# Objekte? Versuchen Sie diese SQL-Anweisung von einer C# -Anwendung aus aufzurufen? Bitte sei klarer. – Mikanikal

+0

@YacoubMassad Ich würde es hoffen. Die Spezifikation besagt, dass es sich um Datums- oder Zeittypen handeln kann. – Mikanikal

Antwort

0

Sie DbFunctions.TruncateTime verwenden können das Datum Teil der DateAdded Spalte zu extrahieren. Dieser Code sollte funktionieren:

var result = context.PartValues 
    .GroupBy(x => new 
    { 
     Date = DbFunctions.TruncateTime(x.DateAdded), //Extract Date only (time part is 0) 
     Hour = x.DateAdded.Hour 
    }).Select(g => new 
    { 
     g.Key.Date, 
     g.Key.Hour, 
     Total = g.Count() 
    }) 
    .ToList(); 
0

den Code Siehe unten:

var results = context.partValues.GroupBy(r => 
    new DateTime(r.dateAdded.Year, 
       r.dateAdded.Month, 
       r.dateAdded.Day, 
       r.dateAdded.Hour, 0, 0), 
    (d, r) => new { date = d, totals = r.Count() }); 
+0

Ich denke, dass OP LINQ zu SQL verwendet und ich denke nicht, dass LINQ die Konstruktion von "DateTime" in der Abfrage in diesem Fall ermöglicht. –

+0

Sie können jedoch innerhalb der Abfrage einen anonymen Typ erstellen, z. B. 'new {r.dateAdded.Year, r.dateAdded.Month, r.dateAdded.Day, r.dateAdded.Hour}'. Das würde funktionieren. –

+0

Haben Sie eine Quelle dafür, dass keine neue Datetime instanziiert werden kann? Ich kann bis jetzt noch nichts finden. –

Verwandte Themen