У меня есть консольное приложение C #, написанное с использованием Visual Studio 2008.
Моя системная культура - 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 интерпретируется как: месяц девятнадцатый, день 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
Предложение where результирующего запроса SQL выглядит следующим образом:
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.
Спасибо.
Alan T