根据表达式树动态生成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的代码了

时间: 2024-08-17 22:40:01

根据表达式树动态生成Lambda表达式的相关文章

动态生成lambda表达式

//1.0 获取我的申请单 int uid = UserMgr.GetCurrentLoginUser().uID; //2.0 获取参数 string kname = f["kname"]; string status = f["status"]; //第一个条件: var query= c => c.fCreatorID == uid //定义出一个c的参数,它的类型为wfReqeustForm var ps = Expression.Parameter(

表达式树动态拼接lambda

动态拼接lambda表达式树 前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表达式树的参数,这样比如其中查询条件有一个是审核状态,另外五个是模糊查询,那这查询时的表达式树参数就要写两次,这样使得代码看起来有很多是重复的,而且如果查询条件多的情况下,在写那表达式树参数时也容易漏写或错写.所以我在想如果可以动态拼接这表达式树,那这代码就要精简很多了.

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

在项目开发中会遇到很多使用lambda表达式的情况,每次都需要判断条件然后在执行代码,对于一个参数可选的接口来说.实现更麻烦.后来在网上看到这种方法.分享给大家.写的不好的地方多多包涵.一开始自己尝试动态生成lambda表达式.多次尝试都不尽人意,后来在nuget中发现了linqkit这个工具.个人感觉非常强大.Linqkit Git库中有详细的代码和文档,你完全可以把他的代码clone下来然后根据自己的需要进行修改. 上例子: public async Task<IHttpActionResu

什么是表达式树,它与表达式、委托有什么区别?

序言 首先,需要普及下基础知识: Expression我们称之为:表达式树, 而Func<>或者Action 称之为:匿名委托,Func与Action的区别是Func带返回值(至少一个参数),Action不带返回值(可以没有任何参数). 以上的关键词是在.net 3.5之后出现的,配合Linq中Lambda使用. 当然Expression还可以动态的进行构造它,而不使用Lambda表达式来定义. 什么是表达式树 它是一种数据结构体,用于存储需要计算.运算的一种结构.这种结构可以只是”存储“,而

表达式树,它与表达式、委托

表达式树,它与表达式.委托有什么区别? 序言 首先,需要普及下基础知识: Expression我们称之为:表达式树, 而Func<>或者Action 称之为:匿名委托,Func与Action的区别是Func带返回值(至少一个参数),Action不带返回值(可以没有任何参数). 以上的关键词是在.net 3.5之后出现的,配合Linq中Lambda使用. 当然Expression还可以动态的进行构造它,而不使用Lambda表达式来定义. 什么是表达式树 它是一种数据结构体,用于存储需要计算.运算

取代DataTable Select方法 并动态拼接Lambda表达式

原来的程序里面,有这样一段代码 var parentFilterString = string.Empty; parentFilterString = exceptList.Aggregate(parentFilterString, (current, id) => current + (" " + parentFieldName + " = '" + id + "' or")); parentFilterString = parentFi

动态组合lambda 表达式

//第三方审核记录实体集合—动态组合lambda 表达式 Expression<Func<ThirdAdEntity, bool>> thirdWhere = p => p.Observer.Split(',').Contains(ortableEntity.CompanyAdtId.ToString()) && p.AdStartDate <= commonProperty.SystemDateTime && p.ThirdAdId !

Java-Lambda表达式第一篇认识Lambda表达式

1.Lambda表达式时Java 8新增的特性.Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码创建只有一个抽象方法的接口(即函数式接口)的实例. 2.当使用Lambda表达式代替匿名内部类创建对象时,Lambda表达式的代码块会代替实现抽象方法的方法体,Lambda表达式就相当于一个匿名方法.Lambda表达式由3部分组成: 1>形参列表:形参列表允许省略形参类型.如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略. 2>箭头(->):必须通

动态创建 Lambda 表达式

首先我们看一个简单 Lambda 表达式的构成. i => i > 5 在这个表达式中,"i" 被称为 Parameter,"i > 5" 是 Body.我们可以对 Body 进行更进一步的分解,那么 "i > 5" 分别包含参数(i).操作符(>)以及一个常数(5).所有这些通过特定顺序的组合,从而构建一个完整的 Lambda 表达式. 我们通过一些例子,来学习如何动态构建这些表达式. 例子1 var list =