我有兩個表父和子。這兩個表都有一個主鍵「MyDate」,在Sql Server中聲明爲DateTime。這兩個表都有一個記錄,其中MyDate設置爲「2011-12-01 00:00:00.000」,即2011年12月1日。Linq To Sql關聯使用英國數據庫登錄的DateTime屬性
在我的Linq to SQL dbml(.Net 3.5)中,我有一個自動創建的關聯在兩個表之間,在MyDate屬性上。 DataContext使用SQL Server(2008)中默認語言設置爲「英式英語」的數據庫登錄。當我運行Linq查詢時:
var query
from parent in myDataContext.PARENTs
select parent
我找回了父記錄,但沒有鏈接的子記錄。
在SQL事件探查器我有這樣的痕跡:
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language British
set dateformat dmy
set datefirst 1
set transaction isolation level read committed
exec sp_executesql N'SELECT [t0].[MyDate] FROM [dbo].[CHILD] AS [t0]
WHERE ([t0].[MYDATE] = @p0)','@p0 datetime',@p0='2011-12-01 00:00:00'
這將返回0記錄;我通過在查詢窗口中直接運行它來檢查它,使用相同的(英國)登錄。如果我註釋掉「set dateformat dmy」,我仍然會得到0條記錄。如果我使用不是英國的登錄名運行它,我會得到一個記錄。如果我使用'01 -12-2011 00:00:00'作爲日期(例如英國日期格式)和英國登錄名,我會得到一個記錄。
在我看來,Linq在創建查詢中使用的日期字符串時沒有使用正確的日期格式。因爲它使用「set dateformat dmy」,爲什麼它不會在它生成的日期字符串中使用該格式?
是否有一個相對簡單的方法來解決這個問題?謝謝。
編輯:在我的模型中,Parent和Child的MyDate屬性具有「DateTime NOT NULL」的服務器數據類型和「DateTime(System.DateTime)」類型。
#IN您的LINQ模型,是吧'DateTime'?或某種類型的字符串?同樣,在C#生成的代碼中。基本上,它應該**不會**將日期作爲字符串傳遞。如果你這樣做,你做錯了什麼。它應該始終是一個類型化的參數,因此文化是無關緊要的。我懷疑你所看到的@ p0的價值僅僅是一個*表示*,而且發送的值實際上是一個二進制浮點數,它在每種文化中都是同一日期。 –
是的,它是我的模型中的DateTime。 – Polyfun