c# Lambda操作类封装
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace EasyFrame.Common
{
public static class LambdaCommon
{
#region 表达式工具
/// <summary>
/// 相当于&&操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisFilter">已生成的过滤条件</param>
/// <param name="otherFilter">未生成的过滤条件</param>
/// <returns>新的过滤</returns>
public static Expression GotoAndAlso(this Expression thisFilter, Expression otherFilter)
{
return Expression.AndAlso(thisFilter, otherFilter);
}
/// <summary>
/// 相当于||操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisFilter">已生成的过滤条件</param>
/// <param name="otherFilter">未生成的过滤条件</param>
/// <returns>新的过滤</returns>
public static Expression GotoOrElse(this Expression thisFilter, Expression otherFilter)
{
return Expression.OrElse(thisFilter, otherFilter);
}
/// <summary>
/// 相当于==操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
return Expression.Equal(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue));
}
/// <summary>
/// 相当于>=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanOrEqual<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于或等于
return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于小于等于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThanOrEqual<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于或等于
return Expression.LessThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于!=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoNotEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
return Expression.NotEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue));
}
/// <summary>
/// 相当于>=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanOrEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于或等于
return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue));
}
/// <summary>
/// 相当于>操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThan<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于
return Expression.GreaterThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于小于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThan<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于
return Expression.LessThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(T)));
}
/// <summary>
/// 相当于>=操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanOrEqualByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于或等于
return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 字符串包含
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoContains(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
return Expression.Call(Expression.Property(thisParameterExpression, propertieName), typeof(string).GetMethod("Contains"), Expression.Constant(propertieValue));
}
/// <summary>
/// 相当于小于或等于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThanOrEqualByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于或等于
return Expression.LessThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 相当于>操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoGreaterThanByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//大于
return Expression.GreaterThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 相当于小于操作
/// ——Author:hellthinker
/// </summary>
/// <param name="thisParameterExpression">查询对象</param>
/// <param name="propertieName">属性名称</param>
/// <param name="propertieValue">属性值</param>
/// <returns>新的过滤</returns>
public static Expression GotoLessThanByDateTime(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
//小于
return Expression.LessThan(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieValue, typeof(DateTime?)));
}
/// <summary>
/// 包含操作 相当余 a=> arr.Contains(a.ID)
/// </summary>
/// <param name="thisParameterExpression"></param>
/// <param name="propertieName"></param>
/// <param name="propertieValue"></param>
/// <returns></returns>
public static Expression ContainsOperations(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
MethodInfo method = null;
MemberExpression member = Expression.Property(thisParameterExpression, propertieName);
var containsMethods = typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(m => m.Name == "Contains");
foreach (var m in containsMethods)
{
)
{
method = m;
break;
}
}
method = method.MakeGenericMethod(member.Type);
var exprContains = Expression.Call(method, new Expression[] { Expression.Constant(propertieValue), member });
return exprContains;
}
/// <summary>
/// 包含操作 相当于 a=>a.ID.Contains(key)
/// </summary>
/// <param name="thisParameterExpression"></param>
/// <param name="propertieName"></param>
/// <param name="propertieValue"></param>
/// <returns></returns>
public static Expression Contains(this ParameterExpression thisParameterExpression, string propertieName, object propertieValue)
{
var propertyExp = Expression.Property(thisParameterExpression, propertieName);
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValue = Expression.Constant(propertieValue, typeof(string));
var containsMethodExp = Expression.Call(propertyExp, method, someValue);
return containsMethodExp;
}
#endregion
}
}
c# Lambda操作类封装的更多相关文章
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- php-redis 操作类 封装
<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...
- 【PHP+Redis】 php-redis 操作类 封装
<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...
- websql操作类封装
在之前,我写了一个websql的封装类库,代码如下: (function(win) { function smpWebSql(options){ options = options || {}; th ...
- [No0000DE]C# XmlHelper XML类型操作 类封装
using System; using System.Data; using System.IO; using System.Text; using System.Threading; using S ...
- dapper 操作类封装
using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using S ...
- [No0000DC]C# FileHelper 本地文件、文件夹操作类封装FileHelper
using System; using System.Diagnostics; using System.IO; using System.Text; using Shared; namespace ...
- Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)
今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> ...
随机推荐
- 使用Scala IDE for Eclipse遇到build errors错误的解决办法
在编写第一个Scala语言的Spark程序时,在Scala IDE for Eclipse中运行程序时出现“Project XXXX contains build errors, Continue l ...
- 从壹开始前后端 [vue后台] 之二 || 完美实现 JWT 滑动授权刷新
缘起 哈喽大家周一好!不知道小伙伴们有没有学习呀,近来发现各种俱乐部搞起来了,啥时候群里小伙伴也搞一次分享会吧,好歹也是半千了(时间真快,还记得5个月前只有20多人),之前在上个公司,虽然也参与组织过 ...
- k8s日志收集方案
k8s日志收集方案 三种收集方案的优缺点: 下面我们就实践第二种日志收集方案: 一.安装ELK 下面直接采用yum的方式安装ELK(源码包安装参考:https://www.cnblogs.com/De ...
- 利用Sqoop将MySQL海量测试数据导入HDFS和HBase
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.安装Sqoop 1.下载sqoop,解压.文件夹重命名 wget http://mirror.bit.edu.cn/apache/sqoop/1 ...
- Python调用ansible API系列(四)动态生成hosts文件
方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ...
- Asp.Net Core 轻松学-多线程之Task快速上手
前言 Task是从 .NET Framework 4 开始引入的一项基于队列的异步任务(TAP)模式,从 .NET Framework 4.5 开始,任何使用 async/await 进行修饰 ...
- 企业级镜像仓库harbor搭建
企业级镜像仓库harbor搭建 一. Harbor概述 VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服 ...
- 异步多线程 Async
进程:进程是一个程序在电脑运行时,全部资源的合集叫进程 线程:是程序的最小执行单位,包含计算资源,任何一个操作的响应都是线程完成的. 多线程:多个线程并发执行 Thread 是.net框架封装 ...
- String字符串类总结
object类 int hashCode() Object定义的hashCode方法能为不同对象返回不同的整数.实际上是把JVM给对象分配的地址转化为整数,确保了逻辑上的唯一性.而转化的散列算法,可能 ...
- 结合JDK源码看设计模式——单例模式
定义: 保证一个类仅有一个实例,并提供一个全局访问点 适用场景: 确保任何情况下这个对象只有一个实例 详解: 私有构造器 单利模式中的线程安全+延时加载 序列化和反序列化安全, 防止反射攻击 结合JD ...