コード例 #1
0
ファイル: EFCoreExtends.cs プロジェクト: wrjwrj121/APIDemo
        private Expression ParaseBetween(ParameterExpression parameter, UosoConditions conditions)
        {
            ParameterExpression p   = parameter;
            Expression          key = Expression.Property(p, conditions.Key);
            var valueArr            = conditions.Value.Split(',');

            if (valueArr.Length != 2)
            {
                throw new NotImplementedException("ParaseBetween参数错误");
            }
            try
            {
                int.Parse(valueArr[0]);
                int.Parse(valueArr[1]);
            }
            catch
            {
                throw new NotImplementedException("ParaseBetween参数只能为数字");
            }
            Expression expression = Expression.Constant(true, typeof(bool));
            //开始位置
            Expression startvalue = Expression.Constant(int.Parse(valueArr[0]));
            Expression start      = Expression.GreaterThanOrEqual(key, Expression.Convert(startvalue, key.Type));

            Expression endvalue = Expression.Constant(int.Parse(valueArr[1]));
            Expression end      = Expression.GreaterThanOrEqual(key, Expression.Convert(endvalue, key.Type));

            return(Expression.AndAlso(start, end));
        }
コード例 #2
0
ファイル: EFCoreExtends.cs プロジェクト: wrjwrj121/APIDemo
        private Expression ParaseIn(ParameterExpression parameter, UosoConditions conditions)
        {
            ParameterExpression p   = parameter;
            Expression          key = Expression.Property(p, conditions.Key);
            var        valueArr     = conditions.Value.Split(',');
            Expression expression   = Expression.Constant(true, typeof(bool));

            foreach (var itemVal in valueArr)
            {
                Expression value = Expression.Constant(itemVal);
                Expression right = Expression.Equal(key, Expression.Convert(value, key.Type));

                expression = Expression.Or(expression, right);
            }
            return(expression);
        }
コード例 #3
0
ファイル: EFCoreExtends.cs プロジェクト: wrjwrj121/APIDemo
        private Expression ParseCondition(UosoConditions condition)
        {
            ParameterExpression p     = parameter;
            Expression          key   = Expression.Property(p, condition.Key);
            Expression          value = Expression.Constant(condition.Value);

            switch (condition.Operator)
            {
            case UosoOperatorEnum.Contains:
                return(Expression.Call(key, typeof(string).GetMethod("Contains", new Type[] { typeof(string) }), value));

            case UosoOperatorEnum.Equal:
                return(Expression.Equal(key, Expression.Convert(value, key.Type)));

            case UosoOperatorEnum.Greater:
                return(Expression.GreaterThan(key, Expression.Convert(value, key.Type)));

            case UosoOperatorEnum.GreaterEqual:
                return(Expression.GreaterThanOrEqual(key, Expression.Convert(value, key.Type)));

            case UosoOperatorEnum.Less:
                return(Expression.LessThan(key, Expression.Convert(value, key.Type)));

            case UosoOperatorEnum.LessEqual:
                return(Expression.LessThanOrEqual(key, Expression.Convert(value, key.Type)));

            case UosoOperatorEnum.NotEqual:
                return(Expression.NotEqual(key, Expression.Convert(value, key.Type)));

            case UosoOperatorEnum.In:
                return(ParaseIn(p, condition));

            case UosoOperatorEnum.Between:
                return(ParaseBetween(p, condition));

            default:
                throw new NotImplementedException("不支持此操作");
            }
        }