我正在尝试解决使用 DataContext.ExecuteQuery 执行 sql 语句的 ASP.NET 应用程序中的问题。查询有这部分:
LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE " + string.Join(" AND ", whereClauses) + @"
其中“whereClauses”是一个字符串列表。这样,在查询中实现了搜索功能。当对像“O'Donnel”这样的字符串运行开放式搜索时会出现问题,这显然会使查询出错。我被要求解决这个问题。我的方法是在查询中将 where 语句替换为“{0}”,然后将其作为参数传递给 ExecuteQuery 方法。我取得的是:
LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId {0}
var where = "WHERE 1=1";
_db.ExecuteQuery<AccountModel>(query, where)
但它不起作用?当我用一个参数替换整个 where 部分时,一切都很好:
LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE 1={0}
var where = "1";
_db.ExecuteQuery<AccountModel>(query, where)
我的问题 - 那么是否可以将整个 where 语句动态注入 DataContext.ExecuteQuery 方法,或者我可以只使用此方法传递特定参数吗?