我正在从EF数据模型中的文本框控件中搜索字符串输入。有人可以帮助我在代码文件中构造where子句来执行此操作。 我在代码中尝试了下面的代码,即使它在我输入搜索字符串并提交搜索时编译也会引发错误。
Where("it.[CaseName] like '%'" + searchString +
"'%' or it.[CaseNumber] like '%'" + searchString +
"'%' or it.[AppRegNumber] like '%'" + searchString +
"'%' or it.[SSNo] like '%'" + searchString + "'%'")
当在EntityDataSource控件标记中使用相同的where子句时,它接受并正确搜索。 我正在更改我的页面以使用ObjectDataSource控件连接到业务逻辑层类而不是直接连接到EDM数据模型。
答案 0 :(得分:3)
如果要使用Where
的{{1}}查询构建器方法(我认为这是您在问题中使用的方法),则需要从查询表达式中删除内部单引号:< / p>
ObjectQuery
或作为参数化查询:
Where("it.[CaseName] like '%" + searchString +
"%' or it.[CaseNumber] like '%" + searchString +
"%' or it.[AppRegNumber] like '%" + searchString +
"%' or it.[SSNo] like '%" + searchString + "%'")
修改强>
如果Where("it.[CaseName] like @search" +
" or it.[CaseNumber] like @search" +
" or it.[AppRegNumber] like @search" +
" or it.[SSNo] like @search",
new ObjectParameter("search", string.Concat("%", searchString, "%")))
来自网页上的用户输入,请不要使用第一个版本,因为此版本容易受到 SQL注入(在搜索引擎中输入此术语以获取解释)。而是在第二个版本中使用参数化查询。
答案 1 :(得分:0)
好吧,你可以使用Linq扩展方法:
.Where(r => r.CaseName.IndexOf(searchString) >= 0
|| r.CaseNumber.IndexOf(searchString) >= 0
|| r.AppRegNumber.IndexOf(searchString) >= 0
|| r.SSNo.IndexOf(searchString) >= 0)