Linq to sql LINQ to SQL:执行参数化查询时ExecuteQuery不工作

Linq to sql LINQ to SQL:执行参数化查询时ExecuteQuery不工作,linq-to-sql,parameterized-query,Linq To Sql,Parameterized Query,我对ExecuteQuery有一个奇怪的问题,它在执行参数化查询时不起作用 以下返回1条记录: db.ExecuteQuery<Member>(@"SELECT * FROM Member INNER JOIN aspnet_Users ON Member.user_id = aspnet_Users.UserId WHERE

我对ExecuteQuery有一个奇怪的问题,它在执行参数化查询时不起作用

以下返回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.user\u id=aspnet\u Users.UserId上内部加入aspnet\u用户
其中[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.user\u id=aspnet\u Users.UserId上内部加入aspnet\u用户
其中[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"); 
db.ExecuteQuery(@“选择*
来自成员
在Member.user\u id=aspnet\u Users.UserId上内部加入aspnet\u用户
其中[aspnet_Users].[UserName]={0},“Marina2”);
注意参数上没有引号。LINQtoSQL将自动知道如何使用引号对其进行格式化

根据:

参数在查询文本中使用Console.WriteLine()和String.Format()使用的相同卷曲符号表示。事实上,String.Format()实际上是在您提供的查询字符串上调用的,用生成的参数名替换大括号内的参数,如@p0、@p1…、@p(n)


因此,基于此,如果您将引号保留在中,您将在
[Username]='@p0'
上进行匹配,但您可以运行探查器并捕获确切的SQL进行验证。

Argh,发现了问题。是{0}周围的单引号。但是,我仍然想知道为什么这会导致问题。使用单引号会导致问题,因为Linq to SQL正在确定参数的类型,并在需要时为您输入它们。这样就不必担心是否要添加它们。