.NET LINQ zu Entitäten nach Datum (Tag) gruppieren

Ich habe das gleiche Problem hier gepostet:Fehler beim Gruppieren von LINQ to Entities mithilfe von .date

Die Antwort ist jedoch nicht 100% richtig. Es funktioniert in allen Fällen, außer wenn verschiedene Zeitzonen verwendet werden. Wenn verschiedene Zeitzonen verwendet werden, werden auch Zeitzonen gruppiert. Warum? Ich habe es geschafft, dies mit vielen Entity-Funktionen zu umgehen.

int localOffset= Convert.ToInt32(
    TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalMinutes);

var results = (
    from perfEntry in db.entry
    where (....)
    select new { 
        perfEntry.Operation, perfEntry.Duration, 
        localTime = EntityFunctions.AddMinutes(perfEntry.Start, 
            localOffset - EntityFunctions.GetTotalOffsetMinutes(
                perfEntry.Start)) 
    }
).GroupBy(x => new { 
    Time = EntityFunctions.TruncateTime(
        EntityFunctions.CreateDateTime(x.localTime.Value.Year,
            x.localTime.Value.Month, x.localTime.Value.Day, 0, 0, 0)),
    x.Operation }
).OrderByDescending(a => a.Key).
Select(g => new {
    Time = g.Key.Time,
    ...
});

Gibt es jemanden da draußen, der weiß, wie man das richtig macht? Dieser Code ist so hässlich und wahrscheinlich sehr ineffizient.

UPDATE (Warnung):
Ich habe auch festgestellt, dass die Funktion EntityFunctions.CreateDateTime einen Fehler aufweist. Es ist nicht kompatibel mit Schaltjahren wie in diesem Jahr. 29. Februar 2012 wird eine Ausnahme werfen.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage