ASP:NET MVC搜索中的多个单词

本文关键字:单词 搜索 NET MVC ASP | 更新日期: 2023-09-27 18:01:05

当用户搜索时,我很难找到如何处理多个单词。例如:搜索:">蓝色方框"应该能够找到:"一个方框。我该怎么做?这基本上就是我的控制器看起来像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);
}

ASP:NET MVC搜索中的多个单词

您的问题是使用整个字符串进行包含。这意味着它必须按该顺序包含"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列表随后包含您的结果。

我能想到的一种方法是通过拆分传入的搜索字符串来逐个搜索。

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);
}

这对我来说非常好。请参阅下面的代码片段和屏幕截图:

string[] SplitValue = StaffSearch.Split(",");
List<HistorypodScans> query = new List<HistorypodScans>();
foreach (var word in SplitValue)
{
      var staffquery = _db.HistorypodScans.Where(x => x.Waybillnumber.Contains(word) || x.AWBNO.Contains(word)).ToList();
      query.AddRange(staffquery);
}
return View(query);

[enter image description here][1]     

[1] :https://i.stack.imgur.com/TRmMW.jpg多个单词搜索结果