Ejemplo n.º 1
0
        public static Criterion From(BinaryExpression expression)
        {
            if (expression.NodeType == ExpressionType.OrElse || expression.NodeType == ExpressionType.AndAlso)
            {
                return(BinaryCriterion.From(expression));
            }

            Criterion create(string property)
            {
                if (property.IsEmpty())
                {
                    return(null);
                }
                return(new Criterion(property, expression.NodeType.ToFilterFunction(), expression.Right.GetValue()));
            }

            var left = expression.Left;

            if (left is ParameterExpression)
            {
                return(create("ID"));
            }

            if (left is MemberExpression memberEx)
            {
                return(create(memberEx.GetDatabaseColumnPath()));
            }

            if (left is UnaryExpression unary && unary.Operand is MemberExpression member)
            {
                return(create(member.GetDatabaseColumnPath()));
            }

            return(null);
        }
Ejemplo n.º 2
0
        Criterion ProcessCriteria(Expression expression)
        {
            var binary = expression as BinaryExpression;

            if (binary != null)
            {
                if (binary.NodeType == ExpressionType.OrElse)
                {
                    var criterion = BinaryCriterion.From <T>(binary);

                    if (criterion?.IsConvertedCompletely == false)
                    {
                        ConvertedCompletely = false;
                    }

                    return(criterion);
                }
            }
            return(CreateCriterion(expression));
        }
Ejemplo n.º 3
0
 public BinaryCriterion And(BinaryCriterion left, BinaryCriterion right)
 {
     return(new BinaryCriterion(left, BinaryOperator.AND, right));
 }
Ejemplo n.º 4
0
 public BinaryCriterion Or(BinaryCriterion left, BinaryCriterion right)
 {
     return(new BinaryCriterion(left, BinaryOperator.OR, right));
 }
Ejemplo n.º 5
0
 string Generate(BinaryCriterion criterion)
 {
     return($"({Generate(criterion.Left)} {criterion.Operator} {Generate(criterion.Right)})");
 }