gpt4 book ai didi

c# - .NET LINQ 按日期(天)对实体进行分组

转载 作者:可可西里 更新时间:2023-11-01 08:13:44 25 4
gpt4 key购买 nike

我在这里发布了同样的问题: 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 存在错误。它与闰年不兼容,例如今年。 2012 年 2 月 29 日将引发异常。

最佳答案

您可以使用 UTC DateTime 并在其后截断时间。

关于c# - .NET LINQ 按日期(天)对实体进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11016703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com