如果我有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,您必须小心使用不同的文化设置与ToUpper()进行比较,如果您在网络环境中,则编码存在许多问题和搜索编码字符问题等。
是否没有.NET或LINQ解决方案可以处理类似搜索机器的搜索,例如而不是Contains()类似于ConstainsSearchTerms()?
答案 0 :(得分:0)
如果您使用的是LINQ2SQL,则可以使用SqlMethods.Like
方法生成类似SQL中使用的LIKE。
在LINQ2Objects上,只需使用正则表达式。
关于ToUpper
。这是有问题的,更好的解决方案是使用字符串大小写折叠,但遗憾的是.NET只支持简单模型:(
答案 1 :(得分:0)
这不是LINQ,但你可能想看看Lucene.NET。它实际上是一个搜索引擎,也是一个非常好的搜索引擎。