В настоящее время я делаю похожую вещь.
То есть у меня есть MVC View, который содержит различные параметры поиска (флажок, раскрывающийся список, текстовое поле), и я хотел элегантный способ вернуть "результаты поиска".
Итак, я создал простой класс - например," ProductSearchCriteria".
Этот класс не содержит ничего, кроме методов получения / установки для различных параметров поиска (которые я заполняю при отправке формы через привязку модели).
Затем я принимаю этот тип в качестве параметра в моем BLLМетод:
public ICollection<Product> FindProductsForCriteria(ProductSearchCriteria criteria)
{
return _repository // GenericRepository<Product>
.Find() // IQueryable<Product>
.WithSearchCriteria(criteria) // IQueryable<Product>
.ToList(); // List<Product>
}
Что касается , как применять фильтры, это зависит от нескольких вещей.Во-первых, я не знаю, используете ли вы Linq-To-Sql, NHibernate, Entity-Framework и т. Д. Кроме того, это зависит от вашей архитектуры (репозитория).
Вы не сможете "«динамически» применять фильтры с помощью лямбда-выражений (не так легко, во всяком случае).
То, что я сделал, было , создал метод расширения , чтобы изящно применить фильтры:Я сказал, это зависит от вашей архитектуры и ORM.Я использую Entity Framework 4.0, которая поддерживает отложенное выполнение , что означает, что я могу создавать запросы к своим объектам (IQueryable) и применять фильтры перед выполнением запроса.