Cómo la fuerza de LINQ to SQL para pasar .NET fecha y hora como datetime2?
-
15-09-2020 - |
Pregunta
Tengo una consulta simple en 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();
El diff
variable debe ser cero, sin embargo no lo es.El SQL generado es el siguiente:
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
He encontrado que es causada por LINQ to SQL que está pasando .NET DateTime
tipo SQL datetime
.Sin embargo, el Date
columna tipo SQL datetime2
.
Es un error en LINQ to SQL o una función?Cómo la fuerza de LINQ to SQL para pasar la fecha de entrada como datetime2
?
Solución
Si no te importa abrir el capó, usted podría hacer esto:
DbCommand dbCommand = dataContext.GetCommand(query);
dbCommand.Parameters ...
dbParameter.DbType = System.Data.DbType.DateTime2;
DbDataReader reader = command.ExecuteReader();
IEnumerable<ResultType> result = dataContext
.Translate<ResultType>(reader);
Otros consejos
Abre tu .archivo dbml, y seleccione la propiedad (Cambios.Fecha).
Abra las Propiedades de la Página (Alt-Enter).Hay un "Servidor de Datos" Tipo de propiedad que usted puede cambiar.
Guardar Y Reconstruido.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow