我在查找用户搜索时如何处理多个单词时遇到问题。例如:搜索:" 蓝框"它应该能够找到:"一个框是蓝色"。我该怎么做?这基本上就是我的控制器看起来像atm:
public ActionResult Index(string searchString)
{
var posts = from s in _context.Posts
select s;
var postIndexViewModel = new PostIndexViewModel();
if (!String.IsNullOrEmpty(searchString))
{
posts = posts.Where(s => s.Title.Contains(searchString));
}
// More code here
return View(postIndexViewModel);
}
答案 0 :(得分:3)
您的问题是您正在使用整个字符串执行包含。这意味着它必须按顺序包含"Blue box"
。
这是你需要做的:
var strings = searchString.Split(' ');
var finalPosts = new List<string>();
if (!String.IsNullOrEmpty(searchString))
{
foreach (var splitString in strings)
{
finalPosts.Add(posts.FirstOrDefault(s => s.Title.Contains(splitString)));
}
}
finalPosts
列表会包含您的结果。
答案 1 :(得分:1)
我能想到的一种方法是通过拆分传入的搜索字符串逐个搜索。
public ActionResult Index(string searchString)
{
var posts = from s in _context.Posts
select s;
var postIndexViewModel = new PostIndexViewModel();
if (!String.IsNullOrEmpty(searchString))
{
var terms = searchString.Trim().Split(' ');
posts = posts.Where(s => terms.Any(terms.Contains));
}
// More code here
return View(postIndexViewModel);
}