У меня есть список продуктов, поступающих из репозитория. Достаточно просто. Теперь я хочу добавить фильтрацию и сортировку. Сортировка может происходить за пределами репозитория, так как нет никакого повышения эффективности, делающего их внутри репозитория (догадка). Я не мог представить, что вы делаете фильтрацию вне репозитория, так как мы хотим только загружать записи, о которых мы заботимся. Я думаю, вы хотели бы создать делегат фильтра и передать его в репозиторий.Простой вопрос о фильтрах о фильтрации и сортировке
Код под псевдонимом C#. Какой код функционирует как сортировка/фильтрация?
Процесс ниже действительно сосредоточены вокруг проходящей делегатов в хранилище для фильтрации:
Product myProduct = Repo.GetProducts(filter);
(если это MS MVC, этот код будет существовать в контроллере):
настроить фильтр :
//TODO: Need filter class definition
var filter = new Filter(); // made up object class for now
filter.AddCondition(field, operator, value); // do this for each filter condition
filter.AddCondition(Product.Name, contains, "Hammer"); // Product.Name ?? (Example)
Product myProducts = Repo.GetProducts(filter); // the Product call **FILTER**
Настройка своего рода:
// TODO: Need sort class definition
var sort = new Sort(); // another made up object class for now
sort.AddOrder(field, priority, sequenceUp) // Sequence enum is ascending/descending
sort.AddOrder(Product.Name, 1, ascending) // (Example) **SORT**
myProducts.AddSort(sort);
Возвращает модель представления:
// Next part strips off unnecessary fields for view (Presentation model)
// So we are not sending a huge data model to the view (hopefully good)
// TODO: Replace string with Service? function to extract a miniProduct from Product
MiniProduct myMinis = MakeMiniProductsFrom(myProducts); // Service?
// Determine response type (XML, JSON, HTML View) and return appropriate data
// use "x-requested-by" as per Rob Conery noted below
if (Request.IsAjaxRequest()) return Json(myMinis);
else return View(myMinis);
Как вы можете видеть, этот код нуждается в помощи. Я действительно ищу код класса сортировки и фильтра, который мог бы сделать эту работу, или ссылки на внешние источники. Я предполагаю, что сортировка и фильтрация являются стандартной практикой в рамках DDD и шаблонов проектирования, поэтому вопрос. Предположим, что продукт является простым старым продуктом электронной коммерции;) Заметки Аякса Роб Коньери: here
Спасибо.
Итак, вы говорите, что ORM должна обеспечивать сортировку и фильтрацию для ваших классов POCO, например, если вы используете шаблоны итератора и т. Д.? –
В идеале, да. Вы хотите, чтобы ORM и уровень данных обрабатывали сортировку и фильтрацию, потому что БД должна работать с этим. Используя IQueryable, фактический фильтр + сортировка отображается непосредственно в БД. –
Например, Linq to Sql поддерживает .Where. Поэтому я бы использовал dc.Products.where (x => x.Name.contains («Hammer»)) и продолжать добавлять.если бы у меня были дополнительные фильтры. Поэтому я должен построить в моем репозитории большой оператор foreach, чтобы принять список условий, а затем применить их как методы .where()? Что касается сортировки, я бы сделал то же самое, например .OrderBy (x => x.Name)? Построить этих делегатов в моем контроллере, а затем передать их как параметры в методе репозитория? –