前言

  这是我的第二篇文章,这是我之前做的ERP项目的时候设计实现的。在这个ERP系统中,功能比较多,表设计的时候建立了很多业务表。对于一些业务表需要执行很多查询,客户要求针对不同的字段进行查询,基于我们之前的设计,针对不同的查询条件设计不同的DAL方法,通过不同的方法签名来实现客户的对于不同条件查询的要求。但是这种解决方案会让程序员很被动,久而久之整个DAL层会显得很臃肿。

  面对这样的困境,考虑是否可以实现用一个通用的DAL方法来代替所有的不同筛选条件查询方法,因为这些查询方法内部的逻辑是一样的,只有查询条件不一样。

组合查询实现

  组合查询的意思就是,DAL方法不需要知道客户的具体查询条件是什么,就可以向客户返回一个结果集。要实现组合查询需要实现以下几个步骤:

  (1) 创建工具类PredicateExtensionses

 1     public static class PredicateExtensionses
 2     {
 3         public static Expression<Func<T, bool>> True<T>() { return f => true; }
 4 
 5         public static Expression<Func<T, bool>> False<T>() { return f => false; }
 6 
 7         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> exp_flow, Expression<Func<T, bool>> expression2)
 8         {
 9 
10             var invokedExpression = System.Linq.Expressions.Expression.Invoke(expression2, exp_flow.Parameters.Cast<System.Linq.Expressions.Expression>());
11 
12             return System.Linq.Expressions.Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(exp_flow.Body, invokedExpression), exp_flow.Parameters);
13 
14         }
15 
16         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> exp_flow, Expression<Func<T, bool>> expression2)
17         {
18 
19             var invokedExpression = System.Linq.Expressions.Expression.Invoke(expression2, exp_flow.Parameters.Cast<System.Linq.Expressions.Expression>());
20 
21             return System.Linq.Expressions.Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.And(exp_flow.Body, invokedExpression), exp_flow.Parameters);
22 
23         }
24     }
PredicateExtensionses

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-12-09
  • 2021-07-28
  • 2022-12-23
  • 2022-12-23
  • 2022-03-01
  • 2022-01-07
猜你喜欢
  • 2021-07-07
  • 2021-12-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-29
  • 2021-06-20
相关资源
相似解决方案