我在这里发布了同样的问题: 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日将抛出异常。
答案 0 :(得分:0)
您可以使用UTC DateTime并在其后加上时间。