3

我正在尝试创建一个通用搜索功能,它将搜索结果集中每个字段的内容。

例如,如果我要在 TSQL 中编写一个函数,该函数返回一个包含 100 行和字段的结果集,TicketID并且我想在每个字段中搜索字符串“Mike”的每条记录。FirstNameLastNameComment

因此,基本上,如果“Mike”一词出现在这些字段中的任何一个中,那么该记录将包含在我的搜索中。

我该怎么做呢?

4

4 回答 4

2

该方法的条目将是一个 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.
        }
    }
}
于 2012-04-03T21:39:33.310 回答
2

您可以创建一个完整的全文索引。您可以通过视图获得整个表或表中选定列的此索引。 http://msdn.microsoft.com/en-us/library/ms142575.aspx#examples 它有自己的语法,但它是 TSQL 查询的一部分,可以与常规列搜索结合使用。

于 2012-04-03T21:59:29.990 回答
1
from x in someTableOrQuery
where x.FirstName.Contains(str) || x.LastName.Contains(str) || ...
select x

这只是普通的 C#。不需要任何技巧。

请注意,这将转换为 SQL 中的 LIKE 表达式。但是您不需要进行容易出现错误的手动字符串连接(在这种情况下不是 SQL 注入)。

于 2012-04-03T20:58:35.777 回答
1

或者您可以使用 SqlMethods.Like 方法,这样您就可以在表达式中搜索特定模式。

像这样的东西:

where SqlMethods.Like(str,"%Mike%");

希望这可以帮助!

于 2012-04-03T21:06:19.267 回答