【问题标题】:Linq search for any of words in termLinq 搜索术语中的任何单词
【发布时间】:2014-10-09 21:48:54
【问题描述】:

我需要在 IQueryable 列表中搜索搜索词中的单词。

目前我有这个工作,但它是为了完全匹配。

list.Where(x => x.MyList.Any(y => y.ToSearch.ToLower().Contains(searchTerm.ToLower())));

我需要的是,如果有人搜索“搜索词”结果应该是:

“搜索条件” “另一个搜索词”

我不确定在 linq 中解决此问题的最佳方法,有人可以帮忙吗?

【问题讨论】:

  • 有些算法可以比较字符串,即使它们并不完全相同。 Here's an example

标签: c# asp.net-mvc linq


【解决方案1】:
//split the search terms by space
var searchWords = searchTerm.ToLower().Split( " ".ToCharArray(), 
                          StringSplitOptions.RemoveEmptyEntries);

//check if any of those search terms is present
list.Where(x => x.MyList.Any(y => 
        searchWords.All(sw=>y.ToSearch.ToLower().Contains(sw))));

【讨论】:

  • 我会在拆分中使用 ToLower() 以提高性能:var searchWords = searchTerm.ToLower().Split(' ', StringSplitOptions.RemoveEmptyEntries)
  • @AD.Net 感谢您的快速响应,这几乎是我所需要的,如果我需要匹配 searchWords 中的所有单词怎么办?
  • @Burt,我已将 searchWords.Any 更改为 searchWords.All,应该匹配所有 searchWords
  • 你赢了 :) 再次感谢您的快速回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多