.NET LINQ для групп лиц по дате (дню)
У меня есть та же проблема, размещенная здесь: LINQ to Entities сбой группы с использованием .date
Тем не менее, ответ не на 100% правильный. Это работает во всех случаях, кроме случаев, когда используются разные часовые пояса. Когда используются разные часовые пояса, он также группируется по часовым поясам. Зачем? Мне удалось обойти это с помощью многих функций сущностей.
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,
...
});
Есть ли кто-нибудь, кто знает, как сделать это правильно? Этот код настолько уродлив и, вероятно, очень неэффективен.
ОБНОВЛЕНИЕ (предупреждение):
Я также понял, что функция EntityFunctions.CreateDateTime страдает от ошибки. Это не совместимо с високосными годами, такими как этот год. 29 февраля 2012 бросит исключение.