LINQをSQLに強制するには、.NET DateTimeをDateTime2として渡しますか?
-
15-09-2020 - |
質問
LINQにSQLからSQLへの単純なクエリがあります。
var id = 23479824;
var date = Changes.Where(ch => ch.Id == id).First().Date;
var diff = Changes.Where(ch => ch.Id == id).Select(ch => SqlMethods.DateDiffNanosecond(date, ch.Date)).First();
.
diff
変数はゼロであるべきですが、そうではありません。生成されたSQLは次のとおりです。
DECLARE @p0 DateTime = '2010-07-14 15:05:49.207'
DECLARE @p1 Int = 44633
SELECT TOP (1) [t1].[value]
FROM (
SELECT DATEDIFF(Nanosecond, @p0, [t0].[Date]) AS [value], [t0].[Id]
FROM [dbo].[Changes] AS [t0]
) AS [t1]
WHERE [t1].[Id] = @p1
GO
.
私はそれがSQL DateTime
として.NET datetime
タイプを渡しているLINQからSQLが原因であることがわかりました。ただし、Date
列にはSQL型datetime2
があります。
SQLまたは機能へのLINQのバグですか?LINQをSQLに強制する方法入力日付をdatetime2
として渡す方法は?
解決
フードを飛び越えていない場合は、これを行うことができます:
DbCommand dbCommand = dataContext.GetCommand(query);
dbCommand.Parameters ...
dbParameter.DbType = System.Data.DbType.DateTime2;
DbDataReader reader = command.ExecuteReader();
IEnumerable<ResultType> result = dataContext
.Translate<ResultType>(reader);
. 他のヒント
.dbmlファイルを開き、プロパティ(変更内容)を選択します。
[プロパティ]ページ(ALT-Enter)を開きます。変更可能な「サーバーデータ型」プロパティがあります。
保存&再構築。
所属していません StackOverflow