Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net LINQ到SQL数据上下文-日期属性-将DateTImeKind未指定日期更改为本地日期_.net_Linq_Linq To Sql_.net 4.0_Datacontext - Fatal编程技术网

.net LINQ到SQL数据上下文-日期属性-将DateTImeKind未指定日期更改为本地日期

.net LINQ到SQL数据上下文-日期属性-将DateTImeKind未指定日期更改为本地日期,.net,linq,linq-to-sql,.net-4.0,datacontext,.net,Linq,Linq To Sql,.net 4.0,Datacontext,我有一个LINQ到SQL数据上下文,其中包含一个具有两个日期属性的类: DateActive DateTime NOT NULL DateInactive DateTime NULL MSDN明确指出: LessThanOrEqual运算符通过比较两个日期时间值的刻度数来确定它们之间的关系。在比较DateTime对象之前,请确保这些对象表示同一时区中的时间。您可以通过比较其种类属性的值来实现这一点 但是在我的LINQ查询中,上面两个字段显示为DateTimeKind.Unspecified,

我有一个LINQ到SQL数据上下文,其中包含一个具有两个日期属性的类:

DateActive DateTime NOT NULL
DateInactive DateTime NULL
MSDN明确指出:

LessThanOrEqual运算符通过比较两个日期时间值的刻度数来确定它们之间的关系。在比较DateTime对象之前,请确保这些对象表示同一时区中的时间。您可以通过比较其种类属性的值来实现这一点

但是在我的LINQ查询中,上面两个字段显示为
DateTimeKind.Unspecified
,我将其与
Date.Today
进行比较,后者是
DateTimeKind.Local

是否有一种很好的方法可以在整个应用程序中将上述属性指定为
DateTimeKind.Local
,这样我就不必像
I.DateActive.ToLocalTime.Date
I.DateInactive.Value.ToLocalTime.Date那样到处转换


我使用的是.NET 4而不是.NET 4.5,因此我认为同样适用。

MSDN文章讨论了比较客户端日期。Linq To SQL将语句转换为SQL,其中不使用DateTimeKind属性

您应该使用DateTimeOffset而不是DateTime。这将允许您使用和利用SQL Server中的DATETIMEOFFSET类型

LINQtoSQL生成SQL语句。System.DateTime和SQL Server的DateTime类型没有时区信息,因此尝试考虑时区是没有意义的。这两个值都不包含任何时区,因此如何进行任何自动转换

您问题中的两个日期时间值来自两个不同的来源<代码>日期时间。今天
来自您的本地机器,其中时区已知,因此它是
DateTimeKind.local

不过,数据库列来自数据库,来自不包含时区信息的数据类型
DateTimeKind.Unspecified
是此处的正确值。顺便说一句,在存储到数据库时,您假设的时区是什么?UTC?你当地的时区?夏天还是冬天

如果要继续使用DateTime类型,则必须将DateTime参数转换为客户端上的正确时区。数据库字段之间的比较不需要任何转换,因为它们转换为的SQL不依赖于时区

如果希望支持不同的时区,则必须切换到DateTimeOffset类型


当然,您可以假设所有数据共享同一时区,而忽略任何差异,在这种情况下,DateTime就足够了。

可能重复:为什么要更改数据库值的DateTimeKind?只需按照MSDN的说明操作即可。。。我想在我的应用程序中弄清楚的是,来自数据库的日期是本地日期时间而不是UTC日期时间。它们都不是-它们没有时区。事实上,如果您总是将它们视为本地的,则不必进行任何转换。我认为我不需要使用DateTimeOffset,我的应用程序仅用于GMT/BST范围内。我只是按照MSDN关于日期类型运算符的说明。并且希望始终使用本地时间。感谢您对日期类型以及LINQ和SQL DateTime处理进行了一些澄清,我理解您的意思是这并不重要,因为LINQ将其转换为SQL,其中DateTime与时区无关。然而,在我的应用程序中的某个时刻,我确实在应用程序中比较了它们,而不是在SQL Server中。