【发布时间】:2010-06-16 16:00:02
【问题描述】:
我有一个使用 Visual Studio 2008 编写的 C# 控制台应用程序。
我的系统文化是 en-GB。我有一个如下所示的 Linq 查询:
var myDate = "19-May-2010";
var cus = from x in _dataContext.testTable
where x.CreateDate == Convert.ToDateTime(myDate)
select x;
生成的 SQL 查询会生成错误,因为它将日期返回为“19/05/2010”,它会将其解释为不正确的日期。出于某种原因,即使我的系统文化设置为 en-GB,它看起来也试图将其解释为 en-US 日期。
有什么想法可以解决这个问题吗?
编辑:感谢有关魔术字符串和 var 滥用的 cmets,但这不是我的问题。我的问题是,在从 Linq 到 SQL 的转换中,日期被解释为美国格式日期(19/05/2010 被解释为:第十九个月、第 5 天和 2010 年)导致以下错误:
System.Data.SqlClient.SqlException: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value
生成的 SQL 查询的 where 子句如下所示:
WHERE ([t0].[CreateDate] = '19/05/2010 00:00:00')
请注意,完全相同的 Linq 查询可以在 LinqPad 中完美运行。
我尝试了以下 where 子句:
where x.CreateDate == DateTime.Today
但仍然出现错误。
附加信息:
SQL Server 查询可视化工具:
SELECT [t0].[field1], [t0].[field2], [t0].[field3] AS [field4], [t0].[field5]
FROM [dbo].[table] AS [t0]
WHERE ([t0].[CreateDateTime] = '19/05/2010 00:00:00')
Original query:
SELECT [t0].[field1], [t0].[field2], [t0].[field3] AS [field4], [t0].[field5]
FROM [dbo].[table] AS [t0]
WHERE ([t0].[CreateDateTime] = @p0)
-------------------------------
@p0 [DateTime]: 19/05/2010 00:00:00
LINQPad:
-- Region Parameters
DECLARE @p0 DateTime SET @p0 = '2010-05-19 00:00:00.000'
-- EndRegion
SELECT [t0].[field1], [t0].[field2], [t0].[field3] AS [field4], [t0].[field5]
FROM [table] AS [t0]
WHERE ([t0].[CreateDateTime] = @p0)
在上面我注意到 LinqPad 以与 VS 不同的格式显示日期。
谢谢。
艾伦·T
【问题讨论】:
标签: c# sql linq-to-sql