2012-01-22 13 views
1

にグローバルフィルタを適用するは、私は、次のデータベース・スキーマを持つEntity Frameworkのモデル

public IQueryable<Order> GetOrders() { 

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

私は販売、従業員、製品などを表示する同様のコードを持っています...私はアプリケーションのどこかにドロップダウンを入れて、指定されたStoreIdから注文、従業員、製品などを表示するグローバルフィルタを設定できるようにしたい、storeIdがnullの場合は、すべてのストアのすべてのレコードを表示する必要があります(フィルタを削除します)。w帽子はそれを行うための最善の方法ですか?

セッション内にstoreIdを設定し、コントローラのデータをフィルタリングする必要がありますか?私はdatalayerにstoreIdパラメータを追加し、フィルタが適用される前にnullかどうか評価する必要がありますか?

答えて

3

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

は、これは私に応じて素敵な設定です。セッションにフィルタパラメータを格納しないでください。上で説明した方法では、アプリケーション内の複数の機能的な「場所」から/その方法でメソッドを使用できます。

関連する問題