2

LINQ to 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

DateTime.NET型を SQL として渡している LINQ to SQL が原因であることがわかりましたdatetime。ただし、Date列には SQL タイプがありますdatetime2

LINQ to SQL または機能のバグですか? LINQ to SQL に入力日付を渡すように強制する方法はdatetime2?

4

2 に答える 2

2

.dbml ファイルを開き、プロパティ (Changes.Date) を選択します。

そのプロパティ ページを開きます (Alt-Enter)。変更できる「サーバー データ タイプ」プロパティがあります。

保存して再構築。

于 2010-07-14T15:42:20.283 に答える
1

ボンネットを開けても構わない場合は、次のようにすることができます。

DbCommand dbCommand = dataContext.GetCommand(query);

dbCommand.Parameters ...

dbParameter.DbType = System.Data.DbType.DateTime2;

DbDataReader reader = command.ExecuteReader();

IEnumerable<ResultType> result = dataContext
  .Translate<ResultType>(reader);
于 2010-07-14T19:00:33.327 に答える