【问题标题】:Does LINQ have any built-in search which supports search-machine-like searching?LINQ 是否有任何支持类似搜索机的搜索的内置搜索?
【发布时间】:2009-12-08 10:39:14
【问题描述】:

如果我有一个List<string> 并想通过它进行标准搜索,我可以使用这样的 LINQ 语句:

(from t in tasks
 where searchTerms.All(term => t.ToUpper().Contains(term.ToUpper()))
 select t).ToList();

但如果我想支持标准的类似搜索引擎的语法来处理以下短语:

contract
contract customer
jim customer
"Jim Smith" customer

然后我需要开始滚动我自己的自定义搜索方法。另外作为Jon Skeet mentioned here,你必须小心比较具有不同culture设置的ToUpper(),如果你是在网络环境中,encoding会有很多问题strong> 和 search-for-encoded-characters 问题等。

是否没有处理类似搜索机器的搜索的 .NET 或 LINQ 解决方案,例如而不是 Contains() 之类的 ConstainsSearchTerms()?

【问题讨论】:

    标签: c# linq search


    【解决方案1】:

    如果您使用的是 LINQ2SQL,则可以使用 SqlMethods.Like 方法生成类似 SQL 中使用的 LIKE。

    在 LINQ2Objects 上的其他内容,只需使用正则表达式。

    关于ToUpper。这是有问题的,更好的解决方案是使用字符串大小写折叠,但不幸的是.NET只支持简单模型:(

    【讨论】:

      【解决方案2】:

      这不是 LINQ,但您可能需要查看 Lucene.NET。它实际上是一个搜索引擎,也是一个相当不错的引擎。

      【讨论】:

        猜你喜欢
        • 2017-04-18
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多