项目中有的时候我们会用到动态表达式的方式去查询数据,这里简单记录下个人的使用方式,方便使用↓


 //构建参数表达式
ParameterExpression parameter = Expression.Parameter(typeof(SimpleResult));
Expression conditionValue = Expression.Equal(Expression.Property(parameter, groupFileName), Expression.Constant(value, typeof(Object)));
var lambdaValue = Expression.Lambda<Func<SimpleResult, bool>>(
conditionValue,
parameter);
var groupCount = resultData.AsQueryable().Count(lambdaValue);
var item = new GroupModel { GroupName = groupFileName, GroupValue = value?.ToString(), GroupCount = groupCount };
listObj.Add(item); /* 1、创建表达式
2、创建表达式参数
3、查询 */ // 表达式传过去的参数
// ParameterExpression parameter1 = Expression.Parameter(typeof(SimpleResult), "o");
// 使用的字段
//MemberExpression member1 = Expression.PropertyOrField(parameter1, groupFileName);
// 要比较的值
//ConstantExpression constant1 = Expression.Constant(value, typeof(Object));
// query
//var query = Expression.Equal(member1, constant1);//Equal等于;GreaterThanOrEqual大于;LessThanOrEqual小于 // var lambda = Expression.Lambda<Func<SimpleResult, bool>>(query, parameter1); // var groupCount2 = resultData.AsQueryable().Count(lambda);

还有另外一种动态表达式的使用方式,通过安装DynamicExpresso.CoreNuget包

参考地址:https://github.com/davideicardi/DynamicExpresso

 ==============================(Install - Package DynamicExpresso.Core)======================================

 var whereExpression = $"m.{queryField}==\"{queryValue}\"";

 string whereExpression = "customer.Age > 18 && customer.Gender == 'F'";

 var interpreter = new Interpreter();
Func<Customer, bool> dynamicWhere = interpreter.ParseAsDelegate<Func<Customer, bool>>(whereExpression, "customer"); Assert.AreEqual(, customers.Where(dynamicWhere).Count()); =====================================================================================================
string whereExpression = "customer.Age > 18 && customer.Gender == 'F'"; var interpreter = new Interpreter();
Expression<Func<Customer, bool>> expression = interpreter.ParseAsExpression<Func<Customer, bool>>(whereExpression, "customer"); Assert.AreEqual(, customers.Where(expression).Count());

记录Linq中lambda动态表达式的使用方式的更多相关文章

  1. Lambda 动态表达式(排序)

    网上看到的: class Program { static List<User> list = new List<User>() { new User(){ID=1,Name= ...

  2. Java | 在 Java 中执行动态表达式语句: 前中后缀、Ognl、SpEL、Groovy、Jexl3

    在一些规则集或者工作流项目中,经常会遇到动态解析表达式并执行得出结果的功能. 规则引擎是一种嵌入在应用程序中的组件,它可以将业务规则从业务代码中剥离出来,使用预先定义好的语义规范来实现这些剥离出来的业 ...

  3. 记录工作中groovy动态生成Flink任务

    工作中的痛点:有一个计算的任务,需要配置成前端配置好一些简单的信息,例如名字,计算间隔,计算规则(这个是需要提前写好,开放给用户选择的),然后通过提交到我们的计算引擎中心生成对应的任务jar包提交到服 ...

  4. LINQ中的动态排序

    使用Linq动态属性排序 使用反射: public static Func<T,Tkey> DynamicLambda<T, Tkey>(string propertyName ...

  5. [EntityFramework]记录Linq中如何比较数据库中Timestamp列的方法(如大于0x00000000000007D1的记录)

    Timestamp对于EF实体的类型是byte[] class Program { static void Main(string[] args) { using (var context = new ...

  6. J2EE 中 用 El表达式 和 Jsp 方式 取得 URL 中的参数方法

    使用 el表达式方法: var urlParamValue = "${param.urlVarName}"; 使用 Jsp 表达式 var urlParamValue2 = &qu ...

  7. LINQ使用Lambda表达式选择几列

    学习LINQ的Lambda的表达式,尝试从数据集合中,选择其中几列. 创建一个model: source code: namespace Insus.NET.Models { public class ...

  8. 关于Linq中的Lambda表达式中OrderBy的深入理解

    起因:就是一段Linq语句,OrderBy里面的i是什么? IQueryable<Student> slist = (from s in EFDB.Student select s). O ...

  9. linq中order by 和group by (含lambda表达式实现)以及综合案例

    一.Linq应用场景 linq的语法通过System.Linq下面的Enumerable类提供支持,也就是说,只要是实现了IEnumerable<T>的对象都可以使用Linq的语法来查询. ...

随机推荐

  1. javascript中的正确错误处理------------引用

    JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出. 解释起来就是,当发生错误时,JavaS ...

  2. 把 textbox 遍历赋值为空

    foreach (Control aa in this.Form.Controls){    if (aa.GetType().ToString() == "System.Web.UI.We ...

  3. beyond compare3 下载

    强大的对比工具,有需要的可以访问以下网址下载. http://www.xfdown.com/soft/4967.html

  4. AcWing:144. 最长异或值路径(dfs + 01字典树)

    给定一个树,树上的边都具有权值. 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: ⊕ 为异或符号. 给定上述的具有n个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数n, ...

  5. SimpleThreadPool给线程池增加拒绝策略和停止方法

    给线程池增加拒绝策略和停止方法 package com.dwz.concurrency.chapter13; import java.util.ArrayList; import java.util. ...

  6. Python最高效爬虫框架

    Overview Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websi ...

  7. 有趣但是没有用的linux命令

    1,小火车 #yum install sl 2,黑客帝国,代码雨 # wget https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2 ...

  8. Linux查看和编辑文件

    例如,要想test.txt文件添加内容"I am a boy",test.txt在当前目录中 方法一:vi编辑法 打开终端,输入vi test.txt 回车,按a或i进入编辑模式, ...

  9. Linux 变量 $$ $! $? $- $# $* $@ $0 $n

    [参考文章]:linux中shell变量$#,$@,$0,$1,$2的含义解释 1. 变量说明 1.1 $$ Shell本身的PID(ProcessID) 1.2 $! Shell最后运行的后台Pro ...

  10. Mac安装软件提示文件损坏

    Mac安装软件提示文件损坏,请移至废纸篓 sudo spctl --master-disable