我正在尝试创建一个通用搜索功能,它将搜索结果集中每个字段的内容。
例如,如果我要在 TSQL 中编写一个函数,该函数返回一个包含 100 行和字段的结果集,TicketID
并且我想在每个字段中搜索字符串“Mike”的每条记录。FirstName
LastName
Comment
因此,基本上,如果“Mike”一词出现在这些字段中的任何一个中,那么该记录将包含在我的搜索中。
我该怎么做呢?
我正在尝试创建一个通用搜索功能,它将搜索结果集中每个字段的内容。
例如,如果我要在 TSQL 中编写一个函数,该函数返回一个包含 100 行和字段的结果集,TicketID
并且我想在每个字段中搜索字符串“Mike”的每条记录。FirstName
LastName
Comment
因此,基本上,如果“Mike”一词出现在这些字段中的任何一个中,那么该记录将包含在我的搜索中。
我该怎么做呢?
该方法的条目将是一个 DataTable,其中包含一组查询的执行结果。然后你需要以这种方式迭代行和列:
foreach (DataRow dr in yourDataTable.Rows)
{
foreach(DataColumn col in yourDataTable.Columns)
{
try
{
if (dr[col].ToString().Contains("Mike"))
{
//Save this one!
}
}
catch
{
//it was not a string, go on then.
}
}
}
您可以创建一个完整的全文索引。您可以通过视图获得整个表或表中选定列的此索引。 http://msdn.microsoft.com/en-us/library/ms142575.aspx#examples 它有自己的语法,但它是 TSQL 查询的一部分,可以与常规列搜索结合使用。
from x in someTableOrQuery
where x.FirstName.Contains(str) || x.LastName.Contains(str) || ...
select x
这只是普通的 C#。不需要任何技巧。
请注意,这将转换为 SQL 中的 LIKE 表达式。但是您不需要进行容易出现错误的手动字符串连接(在这种情况下不是 SQL 注入)。
或者您可以使用 SqlMethods.Like 方法,这样您就可以在表达式中搜索特定模式。
像这样的东西:
where SqlMethods.Like(str,"%Mike%");
希望这可以帮助!