Рассматривали ли вы применение шаблона Спецификация в своем приложении?Возможно, это выглядит излишним, но может оказаться полезным, если ваше приложение будет иметь несколько сложных пользовательских фильтров.
class CampaignSpecification
{
public CampaignSpecification Number(string number);
public CampaignSpecification DateBetween(DateTime from, date to);
public CampaignSpecification Year(DateTime year);
} //I have omitted all the AND/OR stuff it can be easily implemented with any SQL like query language
Вот пример того, как загрузка из хранилища может выглядеть как
var campaignList = CampaignRepository.load(
new CampaignSpec()
.Number("2")
.Year(DateTime.Now);
Также я хотел бы добавить, что это во многом зависит от того, какое решение для доступа к данным вы используете, оно упрощает реализацию, когда вы знаете, какой тип API вы будете использовать (Criteria API, SQL или любой другой), так что выможно настроить интерфейс спецификаций, чтобы упростить его реализацию.
ОБНОВЛЕНИЕ : если вы реализуете спецификации в .NET с использованием linq и nHibernate, ознакомьтесь с http://linqspecs.codeplex.com/