LINQ to SQL: ExecuteQuery non funziona quando si esegue una query con parametri
-
04-10-2019 - |
Domanda
Ho un problema strano con ExecuteQuery nel senso che non funziona quando si esegue una query con parametri.
I seguenti rendimenti 1 registro:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = 'Marina2'");
Tuttavia, la versione con parametri non restituisce alcun risultato:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");
Che cosa sto facendo di sbagliato?
Soluzione
Prova:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = {0}", "Marina2");
Avviso senza virgolette sulla param. LINQ to SQL verrà automaticamente sapere per formattarla con le virgolette.
Come per MSDN :
I parametri sono espresse nel testo query utilizzando la stessa notazione usata da riccio Console.WriteLine () e String.Format (). In realtà, String.Format () è in realtà chiamato sulla stringa di query che fornisci, sostituendo i parametri ricci rinforzati con i nomi dei parametri generati, ad esempio @ p0, p1 @ ..., @p (n).
Quindi, sulla base che se hai lasciato le quotazioni in saresti stato corrispondente sul [Username] = '@p0'
ma si potrebbe correre profiler e catturare l'esatto SQL per verificare.