Хорошо, ребята, это не имеет смысла ...
У меня есть этот метод:
// break down the search terms in to individual keywords
string[] searchTerms = ui_txtSearch.Text.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// get the complete list of companies
List<Company> results = Company.List();
// foreach keyword
for (int i = 0; i < searchTerms.Length; i++)
{
// results = the existing result set - the items that dont meet the current search term results.
results = (from comp in results
where comp.Name.Contains(searchTerms[i]
select comp).ToList();
}
Теперь общая идея заключается в том, что из списка компаний я хочу, чтобы все содержали все ключевые слова в поисковом запросе, указанном в моем текстовом поле на интерфейсе пользователя.
Моя проблема заключается в том, что это «Содержит» (выделено выше в **) ... если я произнес «Компания» в строке «Имя» и ищу «Со», я ожидаю, что в результате это произойдет, потому что имя будет содержать это, но это не ...
есть идеи?
EDIT:
Хорошо, я обнаружил, что проблема заключалась в чувствительности к регистру, поэтому я изменил код на следующий:
// break down the search terms in to individual keywords
string[] searchTerms = ui_txtSearch.Text.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// get the complete list of companies
List<Company> results = Company.List();
// foreach keyword
for (int i = 0; i < searchTerms.Length; i++)
{
// results = the existing result set - the items that dont meet the current search term results.
results = (
from comp in results
where comp.Name.ToLower().IndexOf(searchTerms[i].ToLower()) > -1
select comp
).ToList();
}
Чтобы ответить на некоторые ваши отзывы ниже:
Поисковый термин может быть чем-то вроде «Тестовая компания 1», я ищу все результаты, в которых «test», «company» и «1» можно найти в названии компании, а набор результатов должен содержать все ключевые слова поиска. отображается, когда полное условие поиска разделено на "".
самый чистый способ сделать это с помощью цикла, как я понимаю ??? ... или я не прав?
так что я в основном читаю это как ...
- получить список всех компаний
- фильтр список по критерию поиска 1
- из фильтра отфильтрованного списка по поисковому запросу N ... и повторять, пока не будут учтены все условия.
- набор результатов теперь будет содержать все условия поиска, указанные в названии компании.
Текущий код работает и вроде как отвечает на мой вопрос ... но вы думаете, ребята, есть более эффективный способ сделать это?
Спасибо за помощь всем:)
РЕДАКТИРОВАТЬ 2:
Благодаря всей приведенной ниже помощи, я считаю, что окончательная версия (все еще тестируемая) должна быть такой:
// break down the search terms in to individual keywords
string[] searchTerms = ui_txtSearch.Text.ToLower().Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// get the complete list of companies
List<Company> results;
// results = the existing result set - the items that dont meet the current search term results.
results = (
from comp in Company.List()
where searchTerms.All(s => comp.Name.ToLower().IndexOf(s) > -1)
select comp
).ToList();
спасибо всем:)