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

我发现这是由将 .NETDateTime类型作为 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 回答