ASP:NET MVC搜索多个单词

时间:2015-07-03 11:16:11

标签: c# asp.net asp.net-mvc search

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

}

2 个答案:

答案 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);

}