У меня есть консольное приложение C#, написанное с использованием Visual Studio 2008.Проблема с запросом Linq и форматом даты
Моя культура системы - 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, похоже, что она пытается заинтриговать ее как дату в США.
Любые идеи, как я обойти это?
Редактировать: Спасибо за комментарии о магических строках и var злоупотреблениях, но это не моя проблема. Моя проблема заключается в том, что при преобразовании из 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 ([t0].[CreateDate] = '19/05/2010 00:00:00')
Пожалуйста, обратите внимание, что точно такой же запрос Linq отлично работает в LINQPad.
Я попытался следующие, где положение:
where x.CreateDate == DateTime.Today
и все еще получаю ошибку.
Дополнительная информация:
запросов SQL Server Visualizer:
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
Привет, Дэвид, я попробовал ваше предложение и до сих пор получил ошибку. Я добавил дополнительную информацию к моему вопросу. –
Привет, Дайв, спасибо за ссылку. Я не хочу ничего устанавливать на уровне базы данных, так как есть другие базы данных. Что касается параметров входа в систему, я сменил язык для пользователя с английского на английский, без радости. Что касается каждого соединения, я не знаю, как добиться этого через Linq. Я думаю, что сервер базы данных является проблемой, поскольку я получаю те же ошибки при запуске SQL-версии запроса на сервере разработки и в реальном времени. –
Почему нет ошибок? – Hans