.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 бросит исключение.

Ответы на вопрос(1)

Ваш ответ на вопрос