zoukankan      html  css  js  c++  java
  • Expression拼接

    public static  class ExpressionHelp
        {
            /// <summary>
            /// Lambda表达式拼接
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="first"></param>
            /// <param name="second"></param>
            /// <param name="merge"></param>
            /// <returns></returns>
            public static Expression<T> Compose<T>(this Expression<T> first, Expression<T> second, Func<Expression, Expression, Expression> merge)
            {
                var map = first.Parameters.Select((f, i) => new { f, s = second.Parameters[i] }).ToDictionary(p => p.s, p => p.f);
                var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body);
                return Expression.Lambda<T>(merge(first.Body, secondBody), first.Parameters);
            }
            /// <summary>
            /// and扩展
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="first"></param>
            /// <param name="second"></param>
            /// <returns></returns>
            public static Expression<Func<T1, T2, bool>> And<T1, T2>(this Expression<Func<T1, T2, bool>> first, Expression<Func<T1, T2, bool>> second)
            {
                return first.Compose(second, Expression.And);
            }
            public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
            {
                return first.Compose(second, Expression.And);
            }
    
            /// <summary>
            /// or扩展
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="first"></param>
            /// <param name="second"></param>
            /// <returns></returns>
            public static Expression<Func<T1, T2, bool>> Or<T1, T2>(this Expression<Func<T1, T2, bool>> first, Expression<Func<T1, T2, bool>> second)
            {
                return first.Compose(second, Expression.Or);
            }
            public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
            {
                return first.Compose(second, Expression.Or);
            }
    
        }
  • 相关阅读:
    SQL中sum(),avg()等统计结果为null的解决方法
    PowerDesigner教程系列(六)概念数据模型
    只能输入正整数 已经常用的正则表达式
    PowerDesigner教程系列(四)概念数据模型
    linux全局页目录项
    开始吧
    Tomcat最大连接数问题
    CKEDITOR使用与配置
    /proc/cpuinfo 文件分析(查看CPU信息)
    Tomcat SSL配置及Tomcat CA证书安装
  • 原文地址:https://www.cnblogs.com/330774495qq/p/12855727.html
Copyright © 2011-2022 走看看