如何在多列中搜索相同的搜索字符串?

时间:2011-05-03 18:30:12

标签: asp.net entity-framework c#-4.0

我正在从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数据模型。

2 个答案:

答案 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)