根据表达式树动态生成Lambda表达式

Posted 无心YQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据表达式树动态生成Lambda表达式相关的知识,希望对你有一定的参考价值。

1.准备

  1. 环境:Asp.Net MVC5 、EF6
  2. 前置知识:反射、使用过EF编写过Lambda表达式

2.基础类库

2.1该高级条件的类型

 1     /// <summary>
 2     /// 当前条件所属类型
 3     /// </summary>
 4     public enum Em_AS_ConditionType
 5     {
 6         /// <summary>
 7         /// 8         /// </summary>
 9         [Description("")]
10         And = 0,
11 
12         /// <summary>
13         ///14         /// </summary>
15         [Description("")]
16         Or = 1
17     }

2.2搜索条件

 1     /// <summary>
 2     /// 高级搜索条件
 3     /// </summary>
 4     public enum Em_AS_Condition
 5     {
 6         /// <summary>
 7         /// 包含
 8         /// </summary>
 9         [Description("包含")]
10         Include = 0,
11 
12         /// <summary>
13         /// 等于
14         /// </summary>
15         [Description("=")]
16         Equal = 1,
17 
18         /// <summary>
19         /// 大于等于
20         /// </summary>
21         [Description(">=")]
22         GtEqual = 2,
23 
24         /// <summary>
25         /// 大于
26         /// </summary>
27         [Description(">")]
28         Gt = 3,
29 
30         /// <summary>
31         /// 小于等于
32         /// </summary>
33         [Description("<=")]
34         LtEqual = 4,
35 
36         /// <summary>
37         /// 小于
38         /// </summary>
39         [Description("<")]
40         Lt = 5,
41     }

2.3前端传来的数据模型格式

    /// <summary>
    /// 高级查询
    /// </summary>public class QM_Adv
    {
        /// <summary>
        /// 属性名称
        /// </summary>public string PropName { get; set; }

        /// <summary>
        /// 条件
        /// </summary>public Em_AS_Condition Condition { get; set; }

        /// <summary>
        /// 关键字
        /// </summary>public string Keyword { get; set; }

        /// <summary>
        /// 这组条件与其它条件的关系
        /// </summary>public Em_AS_ConditionType ConditionType { get; set; }
    }

3.准备好基础类库,然后就可以编写表达式树生成Lambda的代码了

 

以上是关于根据表达式树动态生成Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

C#WebAPI根据参数生成Lambda表达式

有没有办法在 lambda 表达式树中使用“动态”?

SqlDataReader生成动态Lambda表达式

基于Expression Lambda表达式树的通用复杂动态查询构建器——《剧透一下》

如果不首先将 lambda 表达式转换为委托或表达式树类型,则无法将 lambda 表达式用作动态分派操作的参数

C# 表达式树 创建生成使用lambda转成表达式树~表达式树的知识详解