#c# #forms #search #logic
#c# #формы #Поиск #Логические
Вопрос:
Я работаю над ASP.net Приложение MVC 3.0 Razor View Engine.
У меня есть форма предварительного поиска, чтобы получить список найденных клиентов
В котором будут такие поля, как
Наконец, кнопка отправки.
У меня есть список клиентов в объекте списка.
Ни одно поле не является обязательным в форме поиска.
Когда пользователь нажимает поиск на основе значений, которые он указал в форме, моя логика должна возвращать соответствующие результаты из объекта List, в котором хранятся все данные клиента.
Итак, я хотел бы выбрать идею у вас.
написать лучшую логику, которая найдет клиента на основе предоставленной пользователем информации.
Я начал с чего-то вроде этого
if (fname != "" amp;amp; lname == "")
{
return _CustomerList.FindAll(p => p.FirstName == fname);
}
else if (fname == "" amp;amp; lname != "")
{
return _CustomerList.FindAll(p => p.LastName == lname);
}
else if (fname != "" amp;amp; lname != "")
{
return _CustomerList.FindAll(p => p.FirstName == fname amp;amp; p.LastName == lname);
}
return _CustomerList;
Я не думаю, что это эффективный способ.
Любые советы были бы большой помощью. спасибо за чтение. 🙂
Комментарии:
1. это тааак старомодно. Разве у вас не может быть только одного текстового поля для ввода, как у chrome? быстрый поиск является современным и используется повсеместно в настоящее время, chrome, меню «Пуск» Win7, IE9, последняя версия black berry… вы выполняете интеллектуальный расширенный поиск в фоновом режиме, но просите пользователя ввести значение поиска только в одном поле. Если Google может выполнять поиск по всему Интернету, вы должны иметь возможность выполнять поиск в своей базе данных.
2. @DavidePiras «вы должны иметь возможность выполнять поиск в своей базе данных», я хотел бы получить комментарии DV. Подобные комментарии показывают очень серьезные недостатки в понимании. База данных, в которой Google выполняет анализ текста, сильно отличается от любой стандартной транзакционной базы данных. Хорошо выполненный полнотекстовый поиск — неизменно сложная задача.
3. это не то, что я имел в виду, не хотел сравнивать Google BigTable или GFS и индексирование с вашими. В любом случае, решайте сами. Мы используем поиск в одном окне в нескольких проектах, и пользователи сначала теряются, а затем изучают его, и им это нравится. вы можете выполнять поиск по FT или по классическому предложению compare / where в выбранном списке полей. В результате пользовательский интерфейс становится плавным и высоко ценится.
Ответ №1:
Вместо этого используйте Linq и an IEnumerable<Customer>
— вы можете составить свой запрос с дополнительными Where()
предложениями по мере необходимости и в конце вернуть соответствующие элементы в виде списка, используя ToList()
.
var matchingCustomers = _CustomerList;
if (!string.IsNullOrEmpty(lname))
{
matchingCustomers = matchingCustomers.Where(x => x.LastName == lname);
}
if (!string.IsNullOrEmpty(fname))
{
matchingCustomers = matchingCustomers.Where(x => x.FirstName == fname);
}
//...
return matchingCustomers.ToList();
Комментарии:
1. Я думаю, это сработает для меня. Я опубликую ответ, как только полностью его реализую
Ответ №2:
Я думаю, это вам поможет..
if (!string.IsNullOrEmpty(lname) || ! string.IsNullOrEmpty(fname))
{
_CustomerList= _CustomerList.Where(x =>x.LastName.Contains(lname.ToUpper().Trim()) ||
x.FirstName.Contains(fname.ToUpper().Trim())
);
return _CustomerList.ToList();
}