可以datacontext.executequery处理整个wery语句



我正在尝试在ASP.NET应用程序中解决问题,该应用程序使用DataContext.executequery执行SQL语句。查询具有此部分:

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE " + string.Join(" AND ", whereClauses) + @"

" whereclauses"是字符串列表。这样,搜索功能就会在查询中实现。在为" O'Donnel"之类的字符串运行打开搜索时会出现问题,显然将查询运行到错误中。我被要求解决这个问题。我的方法是在查询中用" {0}"代替" {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)

但是它不起作用?当我将整个部分替换为参数的部分时,一切都很好:

LEFT OUTER JOIN dbo.Contacts ON dbo.Accounts.SalesRepId = dbo.Contacts.ContactId WHERE 1={0}
var where = "1";
_db.ExecuteQuery<AccountModel>(query, where)

我的问题 - 然后可以将整个语句动态地注入datacontext.executequery方法,还是只能使用此方法传递特定参数?

这是ExecuteQuery方法的帮助页。

您不能传递 thoter ,其中从句作为参数,因为诸如 select * from myTable @param之类的查询不是有效的SQL,而select * from myTable where myField = @param is 有效SQL。

因此,在回答您的特定问题时 - 不,您不能通过将参数传递给ExecuteQuery

但是,为什么不在将其传递给ExecuteQuery之前在代码中构建查询?

,例如

var query = "select * from myTable where 1=1" + string.Join(" AND ", whereClauses);
var result = _db.ExecuteQuery<AccountModel>(query);

最新更新