拼接LINQ动态表达式

using System;
using System.Linq;
using System.Linq.Expressions;

public static class LinqBuilder
{
    /// <summary>
    /// 默认True条件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static Expression<Func<T, bool>> True<T>() { return f => true; }

    /// <summary>
    /// 默认False条件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static Expression<Func<T, bool>> False<T>() { return f => false; }

    /// <summary>
    /// 拼接 OR 条件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="exp"></param>
    /// <param name="condition"></param>
    /// <returns></returns>
    public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> exp, Expression<Func<T, bool>> condition)
    {
        var inv = Expression.Invoke(condition, exp.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>(Expression.Or(exp.Body, inv), exp.Parameters);
    }

    /// <summary>
    /// 拼接And条件
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="exp"></param>
    /// <param name="condition"></param>
    /// <returns></returns>
    public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> exp, Expression<Func<T, bool>> condition)
    {
        var inv = Expression.Invoke(condition, exp.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>(Expression.And(exp.Body, inv), exp.Parameters);
    }
}

public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Example
{
    public Example()
    {
        var linq = LinqBuilder.True<Entity>();
        linq.And(p => p.Id == 30);
        Expression<Func<Entity, bool>> condition = linq.Or(p => p.Name == "");
    }
}
时间: 2024-07-31 11:28:22

拼接LINQ动态表达式的相关文章

.NET深入解析LINQ框架(六:LINQ执行表达式)

阅读目录: 1.LINQ执行表达式 在看本篇文章之前我假设您已经具备我之前分析的一些原理知识,因为这章所要讲的内容是建立在之前的一系列知识点之上的,为了保证您的阅读顺利建议您先阅读本人的LINQ系列文章的前几篇或者您已经具备比较深入的LINQ原理知识体系,防止耽误您的宝贵时间. 到目前为止我们对LINQ的执行原理已经很清楚了,从它的前期构想到它真正为我们所用都有足够的证据,但是似乎问题并没有我们想的那么简单,问题总是在我们使用中频频出现尤其是新技术的使用,当然有问题才能有进步. 一:LINQ执行

逗我玩吗?ViewBag.XXX 找不到编译动态表达式所需的一种或多种类型

现在接手的项目是用 .NET 4 + MVC4 做的. 我尝试着用 Unity 变更一下其中的一个功能的实现. 但是 Unity.MVC4 依赖于 Unity 3 以上的版本, Unity 3 又依赖于 .NET 4.5, Unity.MVC3 又只能用于 MVC3 的项目 . 按我的性格就是要把整个工程改为 .NET 4.5 的算球了, 但是有有同事说 .NET 4.5 是新东西,不知道稳定不稳定. 至于稳定不稳定, 我无从考证. 不用 .NET 4.5 , 那只好自己实现对 Controll

Linq动态查询简易解决之道(原创)

因为项目需要使用Linq来查询数据,但是在多条件查询时,需要使用一大堆if(...!=string.empty)等判断条件感觉不是很优雅.网上搜索以下,大概找到了两种办法,一种是老外写的一个类,感觉用着麻烦:还有就是提供一扩展个方法,参数为某个类型,当调用该方法时,用反射去遍历这个类型的属性,再拿动态查询参数和属性值去比较,然后构建动态lambda表达式,这个也有缺陷,就是需要遍历类型的所有属性,而且构建lambda表达式只能构建==类型表达式,有局限性.所以自己琢磨了一个办法,调用时只需一行代

动态表达式计算

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Text.RegularExpressions; 6 7 namespace CalcTest 8 { 9 public class CalculateExpress 10 { 11 //验证计算表达式 此正则只适用于C# 其他语言不支持 12 private static Reg

zTree初体验--MVC linq动态多条件OR查询

工作需要,使用zTree实现了一个点击显示下拉复选框列表选中项作为查询条件的功能.简单记录下菜鸟级开发历程. zTree:是一个依靠jQuery实现的多功能树控件.通过简单引用配置就可使用. 具体使用: (1).脚本.样式引用 注意:引用顺序,zTree.js一定放最后. <link rel="stylesheet" href="@Url.Content("~/Scripts/jquery.plugins/zTree/zTreeStyle.css")

C#动态表达式计算

应该有不少人开发过程中遇到过这样的需求,我们直接看图说话: 如上图所示,其中Entity为实体类,其中包括五个属性,该五个属性的值分别来自于数据库查询结果: 用户通过可视化界面进行某些条件的配置以及某些算法的配置并自动生成表达式或者生成数学模型: 程序中需要通过生成的表达式以及动态从数据库中获取的数据进行算法映射以及自动计算出结果. 该需求这边可以举出几个应用场景: 1.报表设计器 我们可以通过报表设计器设计数据库的映射关系并配置数据之间的算法关系,然后动态生成报表: 2.某些采集工具 定向采集

找不到编译动态表达式所需的一种或多种类型

找不到编译动态表达式所需的一种或多种类型 2011-12-15 14:15:02| 分类: c#程序设计 | 标签: |举报 |字号大 中 小 订阅 问题描述:Office 打印时,引用了Microsoft.Office.Interop.Excel Excel.Application xlsApp = new Excel.Application(); xlsApp.Visible = true; Excel.Workbooks xlsWbs = xlsApp.Workbooks; Excel.W

LINQ查询表达式---------let子句

LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class Program { static void Main(string[] args) { int[] number = { 12, 15, 16, 17, 18, 19, 20 }; var query = from num in number let n = num % 2 where n == 0

LINQ查询表达式(1) - 查询表达式基础

什么是查询?它有什么用途? "查询"是指一组指令,这些指令描述要从一个或多个给定数据源检索的数据以及返回的数据应该使用的格式和组织形式. 查询不同于它所产生的结果.通常,源数据会在逻辑上组织为相同种类的元素序列. SQL 数据库表包含一个行序列. 与此类似,ADO.NET DataTable 包含一个 DataRow 对象序列. 在 XML 文件中,有一个 XML 元素"序列"(不过这些元素按分层形式组织为树结构). 内存中的集合包含一个对象序列.从应用程序的角度来