LINQ a SQL: ExecuteQuery no funciona cuando se realiza una consulta con parámetros
-
04-10-2019 - |
Pregunta
Tengo un problema extraño con ExecuteQuery en que no está funcionando cuando se realiza una consulta parametrizada.
Las siguientes declaraciones de registro de 1:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = 'Marina2'");
Sin embargo, la versión con parámetros no devuelve ningún resultado:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");
¿Qué estoy haciendo mal?
Solución
Trate:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = {0}", "Marina2");
Aviso sin comillas en el parámetro. LINQ a SQL sabrá automáticamente a formato con las comillas.
Según MSDN :
Los parámetros se expresan en el texto de consulta utilizando la misma notación rizado utilizado por Console.WriteLine () y String.Format (). De hecho, String.Format () se llama en realidad en la cadena de consulta que usted proporciona, sustituyendo los parámetros rizado arriostrados con nombres de parámetros generados como @ p0, p1 @ ..., @p (n).
Así que basado en que si la izquierda en las cotizaciones que habría sido coincidente en [Username] = '@p0'
pero se puede ejecutar y capturar el SQL exacta para verificar.