【问题标题】:How do I search the contents of all fields in a query result set?如何搜索查询结果集中所有字段的内容?
【发布时间】:2012-04-17 13:38:31
【问题描述】:

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

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

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

我该怎么做?

【问题讨论】:

    标签: c# .net sql-server tsql linq-to-sql


    【解决方案1】:

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

    【讨论】:

      【解决方案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.
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

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

        类似这样的:

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

        希望这会有所帮助!

        【讨论】:

          【解决方案4】:
          from x in someTableOrQuery
          where x.FirstName.Contains(str) || x.LastName.Contains(str) || ...
          select x
          

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

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

          【讨论】:

            猜你喜欢
            • 2011-12-14
            • 2015-10-03
            • 2020-09-01
            • 2011-04-17
            • 2020-11-17
            • 2016-07-28
            • 1970-01-01
            • 2015-06-16
            • 2021-04-01
            相关资源
            最近更新 更多