.NET LINQ to实体按日期(日)分组

我在这里发布了同样的问题: LINQ to Entities group-by failure using .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有一个bug。 它与闰年不相容,例如今年。 2012年2月29日将抛出exception。

您可以使用UTC DateTime并在其后加上时间。