2015-07-03 3 views
0

У меня возникли проблемы с поиском способов обработки нескольких слов при поиске пользователя. Пример: Поиск: "Синяя коробка" должна быть в состоянии найти: "Один box is синий". Как мне это сделать? Это в основном, как мой контроллер выглядит ата:.ASP: NET MVC несколько слов в поиске

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

} 
+1

Сначала используйте поискString.Split (''), чтобы разбить searchstring на массив, а затем посмотрите здесь: http://stackoverflow.com/questions/2912476/using-c-sharp-to-check-if-string- contains-a-string-in-string-array – Stephen

+0

'split' searchString, используя пробел. Затем используйте 'Array.Any()', как показано здесь: http://stackoverflow.com/questions/1757214/linq-entity-string-field-contains-any-of-an-array-of-strings – ramiramilu

+0

Проверьте эту ссылку http://stackoverflow.com/questions/11560921/linq-query-to-match-multiple-words – Tonny

ответ

2

Ваша проблема заключается в том, что вы делаете содержит целую строку. Это означает, что он должен содержать "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 список затем содержит результаты.

+0

Это выглядит правильно. Что бы я сделал, чтобы исправить проблему, которая 'не может преобразовать из 'System.Linq.IQueryable ' в строку '' на строке finalPosts.Add()? – Rockyy

+0

Извините, я не знал, что ваш тип был 'post' Просто измените' var finalPosts = new List (); 'to:' var finalPosts = new List (); ' –

+0

:) Я тоже пробовал это. Got 'не может конвертировать из 'System.Linq.IQueryable ' в 'WebApplication3.Models.Post'' – Rockyy

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

} 
Смежные вопросы