Linq - Gruppierung nach Datum und Auswahl der Anzahl

Ich arbeite derzeit durch ein problem, ich möchte eine Abfrage ausführen, die Gruppen die Ergebnisse durch das gewählte Datum.

Für dieses Beispiel, stellen Sie sich ein einfaches Modell, etwa so:

public class User
{
      public DateTime LastLogIn {get; set;}
      public string Name {get; set;}
}

Die Lösung, die ich Suche, ist um die Anzahl der Benutzer angemeldet Date.
In der Datenbank DateTime gespeichert werden mit Datum und Uhrzeit-Komponenten, aber für diese Abfrage, die ich wirklich nur die Sorge um das Datum.

Was ich derzeit habe, ist dies:

    context.Users
            .Where((x.LastLogIn  >= lastWeek)    
                && (x.LastLogIn <= DateTime.Now))
            .GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
            .Select(x => new
            {
                Value = x.Count(),
                Day = (DateTime)EntityFunctions.TruncateTime(x.Key)
            }).ToList();

Oben jedoch gibt eine leere Liste zurück.

End-Ziel ist es, eine Liste von Objekten, die einen Wert enthalten (die Anzahl von angemeldeten Benutzern an einem Tag) und ein Tag (der Tag in Frage)

Irgendwelche Gedanken?

Beim ändern der Abfrage:

    context.Users
            .Where((x.LastLogIn  >= lastWeek)    
                && (x.LastLogIn <= DateTime.Now))
            .GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
            .Select(x => new
            {
                Value = x.Count(),
                Day = (DateTime)x.Key
            }).ToList();

es gibt jetzt eine Liste mit einem einzigen Element, wobei der Wert der Gesamtanzahl der Benutzer, die mit der where-Klausel und den Tag als ersten Tag. Es ist immer noch nicht schien in der Lage sein, um die Gruppe durch die Tage

HINWEIS: stellt sich heraus der oben gezeigte code ist Recht, ich war gerade etwas anderes falsch.

Sql, die es generiert wird (Hinweis möglicherweise sehr leichte syntaktische Fehler hier bei mir, die Anpassung für das Beispiel):

SELECT 
1 AS [C1], 
[GroupBy1].[A1] AS [C2], 
 CAST( [GroupBy1].[K1] AS datetime2) AS [C3]
FROM ( SELECT 
        [Filter1].[K1] AS [K1], 
        COUNT([Filter1].[A1]) AS [A1]
        FROM ( SELECT 
                 convert (datetime2, convert(varchar(255), [Extent1].[LastLogIn], 102) ,  102) AS [K1], 
                1 AS [A1]
                FROM [dbo].[Users] AS [Extent1]
                WHERE (([Extent1].[LastLogIn] >= @p__linq__1) AND ([Extent1].[LastLogIn] <= @p__linq__2)
        )  AS [Filter1]
       GROUP BY [K1]
)  AS [GroupBy1] 
Kommentar zu dem Problem
Die Abfrage sieht OK. Bekommen Sie einen Wert ungleich null zurück, wenn Sie ersetzen Sie GroupBy mit einer geraden Count()? Kommentarautor: dasblinkenlight
Ausgeführt mit einer geraden Anzahl wird die Anzahl erwartet entspricht der where-Klausel scheint es sich um die Gruppierung, die es zu töten Kommentarautor: Thewads
Haben Sie versuchen, ersetzen Sie Tag = (DateTime)EntityFunctions.TruncateTime(x.Key) mit Tag = x.Key? Es sollten die gleichen sein, weil das Datum ist schon gekürzt, die für die Gruppierung. Kommentarautor: dasblinkenlight
Ok, entfernt, geändert hat einige Dinge, es gibt jetzt eine Liste mit einem einzigen Element. Wird die update-Frage mit Details Kommentarautor: Thewads
Auf der Außenseite, das sieht wie ein Fehler in der EF. Haben Sie versucht, die Erfassung von SQL-und es läuft in deine DB direkt zu sehen, was passiert? Kommentarautor: dasblinkenlight

InformationsquelleAutor der Frage Thewads | 2013-10-07

Schreibe einen Kommentar