如何在考虑linq2db(CONVERT_TZ)中的时区的同时按日期分组?

说,我们有按日期保存的针对不同客户的活动列表。 日期保存在utc中,我们知道客户的时区。 我们希望在考虑夏令时的情况下,了解客户所在时区的每天活动量。

在mysql中,我们可以使用CONVERT_TZ(A.activity_date,'UTC',S.timezone) As LocalDate并按LocalDate分组。

在linq2db中,我们可以获取时区的偏移量并将其添加到utc日期,但是,这不会考虑DST。

linq2db中是否有一种我尚未发现的方法可以做到这一点?如果不是,是否有一种方法可以创建映射到linq2db中的CONVERT_TZ的方法?

joshuasc 回答:如何在考虑linq2db(CONVERT_TZ)中的时区的同时按日期分组?

执行此操作的一种可能方法是将方法CONVERT_TZ映射到C#方法,如下所示:

[Sql.Function("CONVERT_TZ",ServerSideOnly = true)]
public static DateTime? ConvertToTz(DateTime? i_Date,string i_TzFrom,string i_TzTo)
{
   throw new InvalidOperationException();
}
然后可以像任何linq2db方法一样调用

ConvertToTz

...GroupBy(a => ConvertToTz(a.ActivityDate,"UTC","America/Montreal"))
.Select(g => new {
 Date = g.Key,Count = g.Count()
})
本文链接:https://www.f2er.com/2704882.html

大家都在问