我是一名使用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日期。
有什么办法可以解决这个问题吗?
编辑:感谢评论中提到的魔术字符串和变量滥用,但这不是我的问题。我的问题是在从Linq转换为SQL时,日期被解释为美国格式的日期(19/05/2010被解释为:月份十九,日五,年份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')
请注意,在LinqPad中完全相同的Linq查询可以正常工作。
我尝试了以下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不同。谢谢。Alan T