.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.