0

我们有如下的数据访问层架构:

  1. 类,映射到数据库表。比方说,Order。它具有Statustype 的属性string

  2. 数据协定类OrderContract,具有Status某种枚举类型的属性。(DB 包含此枚举的字符串表示形式)

  3. 实体框架驱动的存储库,内部获取Orders,将它们转换为OrderContractviaAutoMapper并返回这些OrderContracts。

现在我们有一个任务是在这个存储库中实现方法,它可以使用任意标准(谓词)查询订单。如果存储库返回 just Order,我会添加这样的方法:

public List<Order> FilterBy( Expression<Func<Order, bool> predicate );

但不幸的是,存储库返回OrderContracts。

是否有任何标准或方便的方法来实现这种能够获得表达式OrderContract并返回OrderContracts 的方法?

我可以说出我们有两个想法:

  1. 编写一个表达式重写器,它将输入表达式Expression<Func<OrderContract, bool>>转换为Expression<Func<Order, bool>>. 但是这个重写器必须知道如何将枚举比较转换为字符串比较等。

  2. 创建一组规范,知道如何执行不同的查询(Select.ById( someId )ByNumber( someNumber )),并能够创建必要的Order表达式。

4

0 回答 0