Linq к sql: executewhery не работает при выполнении параметризованного запроса
-
04-10-2019 - |
Вопрос
У меня есть странная проблема с executewhery в том, что она не работает при выполнении параметризованного запроса.
Следующие возвраты 1 запись:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = 'Marina2'");
Тем не менее, параметризованная версия возвращает никаких результатов:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = '{0}'", "Marina2");
Что я делаю неправильно?
Решение
Пытаться:
db.ExecuteQuery<Member>(@"SELECT *
FROM Member
INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId
WHERE [aspnet_Users].[UserName] = {0}", "Marina2");
Не заметите никаких цитат на параметрах. LINQ для SQL автоматически узнает, чтобы отформатировать его с кавычками.
Согласно MSDN:
Параметры выражены в тексте запроса с использованием одной и той же курсовой записи, используемой Console.Writeline () и String.format (). На самом деле, string.format () фактически вызывается в строке запроса, которую вы предоставляете, подставляя вьющиеся призванные параметры с генерируемыми именами параметров, таких как @ P0, @ p1 ..., @p (n).
На основании того, что если вы покинули цитаты, вы должны были бы соответствовать [Username] = '@p0'
Но вы можете запустить Profiler и захватить точный SQL для проверки.