Применение глобального фильтра к модели Entity Framework - PullRequest
1 голос
/ 22 января 2012

У меня есть следующая схема базы данных:

Store
  StoreId
  Name
  ...

Order
  OrderId
  StoreId
  ....

У меня есть серверное приложение mvc asp.net с таким хранилищем данных (упрощенно):

   public IQueryable<Order> GetOrders() {

        return storeDB.Orders
            .OrderByDescending(o => o.DateDue)
            .ThenByDescending(o => o.DateCreated);
    }

У меня есть аналогкод для отображения продаж, сотрудников, продуктов и т. д. Я хочу поместить раскрывающийся список где-нибудь в приложении, чтобы позволить мне установить глобальный фильтр, отображающий только заказы, сотрудников, продукты и т. д. из заданного StoreId, если storeIdЯ должен показывать все записи из всех хранилищ (удалить фильтр). Каков наилучший способ сделать это?

Должен ли я установить storeId в сеансе и отфильтровать данные в контроллере?я должен добавить параметр storeId в свой слой данных и оценить, если он равен нулю или нет до применения фильтра?

1 Ответ

3 голосов
/ 22 января 2012

Я бы выбрал List<Int> или List<Guid> или что-то еще DataType, которое вы используете для StoreID, и использовал бы этот список в качестве параметра в методе. Затем вы можете в конечном итоге также показать заказы для нескольких магазинов или для одного магазина или для всех магазинов. А затем просто используйте оператор if, чтобы обнаружить, что список содержит что-то или ничего, что-то вроде:

public IQueryable<Order> GetOrders(List<Guid> storeIDs)
{
  if(storeIDs == null || storeIDs.Count == 0)
  {
    return storeDB.Orders
           .OrderByDescending(o => o.DateDue)
           .ThenByDescending(o => o.DateCreated);
  }
  else
  {
    return storeDB.Orders
           .Where(o => storeIDs.Contains(o.StoreID))
           .OrderByDescending(o => o.DateDue)
           .ThenByDescending(o => o.DateCreated);
  }
} 

Это хорошая настройка, по моему мнению. Не храните параметры фильтра в сеансе или где-либо еще. Описанным выше способом способ может использоваться из / в нескольких функциональных «мест» в вашем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...