我在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
我发现它是由LINQ to SQL引起的,它将.NET DateTime
类型作为SQL datetime
传递。但是Date
列的SQL类型为datetime2
。
它是LINQ to SQL或功能中的错误吗?如何强制LINQ to SQL将输入日期传递为datetime2
?
答案 0 :(得分:2)
打开.dbml文件,然后选择属性(Changes.Date)。
打开它的属性页面(Alt-Enter)。您可以更改“服务器数据类型”属性。
保存&重建。
答案 1 :(得分: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);