2012-01-22 2 views
1

Я следующую схему базы данных:Применение глобального фильтра для Entity Framework модели

Store 
    StoreId 
    Name 
    ... 

Order 
    OrderId 
    StoreId 
    .... 

У меня есть ASP.NET MVC приложение бэкэнда с repostory данных, как это (упрощенный):

public IQueryable<Order> GetOrders() { 

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

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

Должен ли я установить storeId в сеанс и фильтровать данные в контроллере? следует ли добавить параметр storeId в мой datalayer и evalute, если он равен null или нет, прежде чем применять фильтр?

ответ

3

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

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); 
    } 
} 

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

Смежные вопросы