Linq поиск по нескольким ключевым словам - PullRequest
2 голосов
/ 16 октября 2011

У меня есть ситуация, когда у меня есть столбец Keyword в таблице, которая содержит ключевые слова, разделенные запятыми. Пользователь может предоставить несколько поисковых терминов для поиска по столбцу ключевых слов. Например, пользователь предоставляет приведенные ниже условия поиска «один, два, три», а столбец БД может содержать любой из «один», «два», «три» или ни один из них. Как я могу написать запрос, который соответствует любому из предоставленных условий поиска.

Я пробовал ниже

string[] searchTerm = {"one","two","three"};

query =Product.Where( p=> searchTerm.Any(val => p.Keywords.Contains(val)));

и

var query=db.Products;

 foreach (string searchword in searchTerm)
  {
    query = query.Where(c => c.Keywords.Contains(searchword ));
  }

но это не работает для меня.
Спасибо,

1 Ответ

1 голос
/ 16 октября 2011

Если вы разделите текст, предоставленный пользователем, на разные ключевые слова, например, при преобразовании «один, два», три »в строку [], вы можете сделать что-то вроде:

 string [] keys = keywords.Split(',');
 var query = new List<Product>();
 foreach (var item in keys)
 {
    query = query.Concat ((IEnumerable<Product>)Product.Where(x=>x.KeyWords.Contains(item))).ToList();
 }

Пример:

List<Product> ass = new List<Product>();

Product a = new Product();
a.KeyWords = "one, two, three";

Product a1 = new Product();
a1.KeyWords = "one, three";

Product a2 = new Product();
a2.KeyWords = "five";

ass.Add(a);
ass.Add(a1);
ass.Add(a2);

string userInput = "one, seven";

string [] keys = userInput.Split(',');
var query = new List<Product>();
foreach (var item in keys)
{
    query = query.Concat ((IEnumerable<Product>)ass.Where(x=>x.KeyWords.Contains(item))).ToList();
}

foreach (var item in query )
{
    Console.WriteLine(item.KeyWords);
}

Печать:

one, two, three
one, three
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...