データアクセス層の次のアーキテクチャがあります。
DB テーブルにマップされるクラス。としましょう
Order。Statusタイプのプロパティがありますstring。何らかの列挙型の
OrderContractプロパティを持つデータ コントラクト クラス。Status(DB には、この列挙型の文字列表現が含まれています)内部で を取得し、それらをvia
Orderに変換してこれらの を返すEntity Framework を利用したリポジトリ。OrderContractAutoMapperOrderContract
そして今、このリポジトリにメソッドを実装するタスクがあります。これは、任意の基準 (述語) を使用して注文を照会できるようにするものです。リポジトリが だけOrderを返す場合、次のようなメソッドを追加します。
public List<Order> FilterBy( Expression<Func<Order, bool> predicate );
残念ながら、リポジトリはOrderContracts を返します。
の式を取得してsOrderContractを返すことができるようなメソッドを実装する標準的または便利な方法はありますか?OrderContract
私たちが持っている2つのアイデアを挙げることができます:
Expression<Func<OrderContract, bool>>入力式を に変換する式リライターを作成しExpression<Func<Order, bool>>ます。しかし、このリライタは、列挙比較を文字列比較などに変換する方法を知っている必要があります。Select.ById( someId )さまざまなクエリ ( など) の実行方法を認識し、ByNumber( someNumber )必要な式を作成できる一連の仕様を作成しますOrder。