У меня такая же проблема размещена здесь: Сбой 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 года выйдет исключение.