Tengo un LINQ muy sencillo de consulta SQL en C#:LINQ a SQL decimal Parámetro
int acctNum = 12345;
var query = from p in db.table
where p.ACCT_NO == acctNum
select p;
Esto genera el siguiente código SQL:
exec sp_executesql N'SELECT [t0].field1, [t0].field2, [t0].ACCT_NO
FROM [dbo].[table] AS [t0]
WHERE [t0].[ACCT_NO] = @p0', N'@p0 decimal(29,0)', @p0 = 12345
Por alguna razón, esto está tomando un tiempo increíblemente largo tiempo de ejecución (varios minutos). Si ejecuto una consulta equivalente en Management Studio (seleccione * de la tabla donde acct_no = 12345), lleva menos de un segundo en una tabla muy grande (~ 7MM filas). Después de cavar un poco con el generador de perfiles SQL, encontré que linq está pasando el parámetro acctNum como un decimal (29,0) mientras que el campo está almacenado en la base de datos como numérico (18,0). Si tomo el SQL generado y simplemente cambio el tipo de parámetro de decimal a numérico, se ejecuta en menos de un segundo. En el generador de perfiles, puedo ver que la versión de linq usa casi 2 millones de lecturas en comparación con 400 para la consulta de parámetros numéricos. ¿Cómo puedo forzar a linq a pasar este parámetro como numérico en lugar de decimal?
¿Te refieres al tipo de datos SQL del campo de base de datos subyacente? Es un numérico (18,0). – maxpower47
No, me refiero al tipo de la propiedad 'ACCT_NO' en cualquier tipo' p'. –
En VS, p.ACCT_NO se muestra como Decimal. ¿Cómo puedo cambiar eso? – maxpower47