zoukankan      html  css  js  c++  java
  • 改进的ExpressionItem扩展

    using System;
    using System.Linq.Expressions;

    namespace Phoenix.Modules.Common.Infrastructure.TypeExtensions.LinqExtension
    {
        public static class ExpressionExtention
        {
            public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> left, ExpressionItem<T> expressionItem)
            {
                //如果左边表达式为空
                if (left == null)
                {
                    left = (g => true);
                    return left.And(expressionItem);
                }
                //如果右表达式为空,返回左表达式
                if (expressionItem == null)
                {
                    return left;
                }

                //右边表达式变量值为空
                if (expressionItem.Value == null)
                {
                    //如果变量为空值不产生表达式
                    if (!expressionItem.AttachWhenValueNull) return left;

                    left = left.And(Specification<T>.Eval(expressionItem.Expression).GetExpression());
                    return left;

                }

                //如果右边表达式变量值不为空

                Type t = expressionItem.Value.GetType();
                //如果是字符型
                if (t.Name == "String")
                {
                    //如果是空白字符
                    if (string.IsNullOrWhiteSpace(expressionItem.Value))
                    {
                        //如果变量为空值不产生表达式
                        if (!expressionItem.AttachWhenValueNull) return left;
                    }

                }
                left = left.And(Specification<T>.Eval(expressionItem.Expression).GetExpression());
                return left;

            }

            public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> left, ExpressionItem<T> expressionItem)
            {
                //如果左边表达式为空
                if (left == null)
                {
                    left = (g => false);
                    return left.Or(expressionItem);
                }
                //如果右表达式为空,返回左表达式
                if (expressionItem == null)
                {
                    return left;
                }

                //右边表达式变量值为空
                if (expressionItem.Value == null)
                {
                    //如果变量为空值不产生表达式
                    if (!expressionItem.AttachWhenValueNull) return left;

                    left = left.Or(Specification<T>.Eval(expressionItem.Expression).GetExpression());
                    return left;

                }

                //如果右边表达式变量值不为空

                Type t = expressionItem.Value.GetType();
                //如果是字符型
                if (t.Name == "String")
                {
                    //如果是空白字符
                    if (string.IsNullOrWhiteSpace(expressionItem.Value))
                    {
                        //如果变量为空值不产生表达式
                        if (!expressionItem.AttachWhenValueNull) return left;
                    }

                }
                left = left.Or(Specification<T>.Eval(expressionItem.Expression).GetExpression());
                return left;

            }
        }

        public class ExpressionItem<T>
        {
            public ExpressionItem(Expression<Func<T, bool>> expression, dynamic value, bool attachWhenValueNull)
            {
                Expression = expression;
                Value = value;
                AttachWhenValueNull = attachWhenValueNull;
            }
            public Expression<Func<T, bool>> Expression { get; }
            public dynamic Value { get; }
            public bool AttachWhenValueNull { get; }
        }
    }

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/nirvanan/p/11981078.html
Copyright © 2011-2022 走看看