具有任意表达式谓词的存储库,数据协定类和过滤器请求

时间:2013-09-16 12:07:22

标签: .net repository application-design

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

  1. 类,映射到DB表。比方说,Order。它具有Status类型的属性string

  2. 数据合约类OrderContract,具有某些枚举类型的属性Status。 (DB包含此枚举的字符串表示)

  3. 实体框架驱动的存储库,内部获取Order,通过OrderContract将其转换为AutoMapper并返回OrderContract s。

    < / LI>

    现在我们有一个任务来实现此存储库中的方法,该方法可以使用任意条件(谓词)查询订单。如果存储库只返回Order,我会添加一个这样的方法:

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

    但遗憾的是,存储库返回OrderContract s。

    是否有任何标准或方便的方法来实现此类方法,以便能够获得OrderContract的表达式并返回OrderContract

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

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

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

0 个答案:

没有答案