zoukankan      html  css  js  c++  java
  • 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)
                {
                    if (m.GetParameters().Count() == 2)
                    {
                        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
        }
    }
  • 相关阅读:
    queued frame 造成图形性能卡顿
    用python制作全国身份证号验证及查询系统
    使用 Scrapy 爬取去哪儿网景区信息
    Python 分析电影《南方车站的聚会》
    Python使用openpyxl操作excel表格
    Python爬虫实战:批量下载网站图片
    Python爬虫实战:爬取腾讯视频的评论
    用python重新定义【2019十大网络流行语】
    Python-根据照片信息获取用户详细信息(微信发原图或泄露位置信息)
    利用Python写一个抽奖程序,解密游戏内抽奖的秘密
  • 原文地址:https://www.cnblogs.com/feizianquan/p/9734390.html
Copyright © 2011-2022 走看看