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);
            }
    
        }
  • 相关阅读:
    Struts2+Spring+Mybatis+Junit 测试
    struts2 action 页面跳转
    Java面试题(全)
    Java面试题
    Kubernets二进制安装(17)之安装部署Dashboard
    Kubernets二进制安装(16)之安装部署traefik(ingress)
    Kubernets二进制安装(15)之安装部署coredns
    Kubernets二进制安装(14)之flannel之SNAT规则优化
    Kubernets二进制安装(13)之部署Flannel
    Docker网络模型
  • 原文地址:https://www.cnblogs.com/330774495qq/p/12855727.html
Copyright © 2011-2022 走看看