كيفية فرض LINQ على SQL لتمرير .NET DateTime كـ datetime2؟
-
15-09-2020 - |
سؤال
لدي استعلام بسيط في LINQ إلى 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 إلى SQL الذي يمرر .NET DateTime
اكتب كـ SQL datetime
.ومع ذلك Date
يحتوي العمود على نوع SQL datetime2
.
هل هو خطأ في LINQ إلى SQL أم ميزة؟كيفية فرض 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.، ثم حدد الخاصية (Changes.Date).
افتح صفحة الخصائص (Alt-Enter).توجد خاصية "نوع بيانات الخادم" والتي يمكنك تغييرها.
حفظ وإعادة البناء.
لا تنتمي إلى StackOverflow