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> ...
随机推荐
- C/C++反三角函数使用注意
最近写的东西用到了数学库中的acos函数,但是代码在运行的时候有时候会出莫名其妙的错误,比如返回值是个特别大的数. 最后在debug 的时候发现acos返回的数据很奇怪,但是传入的参数明明没有问题,可 ...
- 查看keras自动给文件夹标号
from tensorflow.contrib.keras.api.keras.preprocessing.image import ImageDataGenerator,img_to_array f ...
- 利用face_recognition库裁取人脸
from PIL import Image import face_recognition # Load the jpg file into a numpy array image = face_re ...
- 腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列
说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你"输入URL回车之后,究竟发生了什么"一样,看看你能说出多少了. 之前腾讯 ...
- python接口自动化(十八)--重定向(Location)(详解)
简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域 ...
- javaScript设计模式之----工厂模式
什么是工厂模式?我们通过一个例子了解一下: 比如我们想要弹出几个字符串 function funA(){ alert('a'); } function funB(){ alert('b'); } fu ...
- 一起学Android之Http访问
概述 在Android开发中,一般通过网络进行访问服务器端的信息(存储和检索网络中的数据),如API接口,WebService,网络图片等.今天主要讲解Http访问的常用方法,仅供学习分享使用. 涉及 ...
- Github排序(转载)
目录 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 希尔排序 5. 归并排序 6. 快速排序 7. 堆排序 8. 计数排序 9. 桶排序 10. 基数排序 参考:https://mp.weix ...
- kafka集群broker频繁挂掉问题解决方案
现象:kafka集群频繁挂掉 排查日志:查看日志文件[kafkaServer.out],发现错误日志:ERROR Shutdown broker because all log dirs in /tm ...
- Python算法练习--把搜索树转成双向链表
本文目前分享的题目都是来自于July的分享,然后把具体算法实现.搜索树转双向链表主要的实现逻辑是在中序遍历时,调整节点的左右子树:因为中序遍历是递归调用,所以在调整时一定要注意调整的位置,如果写错了, ...