Для веб-сайта, который я делаю, мы используем LINQ to Entities. Мне было поручено добавить поисковую функцию на сайт. Я пытаюсь найти наиболее элегантный способ поиска нескольких ключевых слов (введенных пользователем) в одном поле в базе данных. Позвольте мне привести пример.
Столбцы таблицы:
Name, Description
Пример строки:
"Cookie monster", "Fluffy, likes cookies and blue"
Поиск пользователя (разделитель не имеет значения):
"blue fluffy"
В настоящее время я использую следующее:
public List<SesameCharacters> SearchByKeywords(string keywords)
{
List<SesameCharacters> output = new List<SesameCharacters>();
string[] k = keywords.ToLower().Split(' ');
using (SesameStreet_Entities entities = new SesameStreet_Entities())
{
IQueryable<SesameCharacters> filter = entities.SesameCharacters;
foreach (string keyword in k)
filter = ForceFilter(filter, keyword);
output = filter.ToList();
}
return output;
}
private IQueryable<SesameCharacters> ForceFilter(IQueryable<SesameCharacters> filter, string keyword)
{
return filter.Where(p => p.Description.ToLower().Contains(keyword));
}
В настоящее время это работает, как и ожидалось, но я думаю, что это не лучшее решение проблемы. Я что-то упускаю из виду очевидное?
ПРИМЕЧАНИЕ: Это AND
соответствие.