C# 带时区的linq到sql分组

C# 带时区的linq到sql分组,c#,linq,C#,Linq,我有一个linq到sql查询,它按日期时间对结果进行分组,如下所示: var TheQuery = from .... where .... group a by a.TheDateTime.Date in TheGroups 问题是,这会根据数据库中存储在UTC中的实际日期进行分组。假设我想根据用户的时区按日期分组。例如,如果他在太平洋标准时间时区,按“UTC减去8小时”或其他偏移量分组 谢谢你的建议。如果你想找回所有信息,坦率地说

我有一个linq到sql查询,它按日期时间对结果进行分组,如下所示:

var TheQuery = from ....
               where ....
               group a by a.TheDateTime.Date in TheGroups
问题是,这会根据数据库中存储在UTC中的实际日期进行分组。假设我想根据用户的时区按日期分组。例如,如果他在太平洋标准时间时区,按“UTC减去8小时”或其他偏移量分组


谢谢你的建议。

如果你想找回所有信息,坦率地说,我会把它带回客户端,并在LINQ to Objects中进行分组。这样,您就可以集中精力使用一个平台的日期和时间API——当涉及时区时,正确使用一个API已经足够困难了,更不用说两个了

(作为一个插件,它还意味着您可以为此使用任何您喜欢的.NET API,例如;)

因此,我将在分组之前进行所有过滤和投影,然后使用
AsEnumerable()
强制其余的执行在本地进行


别忘了,你几乎肯定不能只加或减8小时,除非用户真的在一个不使用夏令时的时区(历史上也没有)。您是否也确定对所有数据应用相同的时区是合适的?(很可能-只是检查一下。)

目前,我并没有从服务器带回所有信息;我在服务器上进行分组(和计数),只返回每个组的计数。我想添加一个.TheDateTime.AddMinutes(OffsetTimezone),其中OffsetTimezone是一个int,包含UTC和时区之间的分钟数。它没有红色下划线,但我还没有编译解决方案。会让你知道这个技巧是否有效。@frenchie:但大多数时区与UTC之间没有固定的偏移量-这取决于夏令时是否处于活动状态。是的,我每次用户登录时都使用TimeZoneInfo类计算偏移量,并将其存储在会话中。我就是这样处理夏令时的问题的。@frenchie:不,夏令时不是那样的。仅仅因为偏移量现在可能是8小时,并不意味着在
a.TheDateTime.Date
时是8小时。我决定使用我拥有的,因为该应用程序将用于专业用途;人们不太可能在夜间工作,所以白天的节光问题不应该是个问题。