سؤال

لدي استعلام بسيط في 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).توجد خاصية "نوع بيانات الخادم" والتي يمكنك تغييرها.

حفظ وإعادة البناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top