Ejemplo n.º 1
0
        void IQueryVisitor.Visit(FilteringDescriptor filter)
        {
            // The member you want to evaluate (x => x.FirstName)
            Expression member = LinqExpressionHelper.GetMemberChainExpression(_param, filter.Field);

            // The value you want to evaluate
            Expression constant = Expression.Constant(filter.Criterion);

            if (filter.IgnoreCase && filter.Criterion is string)
            {
                member   = Expression.Call(Expression.Coalesce(member, LinqProviderStatic.EmptyStr), LinqProviderStatic.ToUpper);
                constant = Expression.Constant(string.IsNullOrEmpty((string)filter.Criterion) ? string.Empty : (string)filter.Criterion);
                constant = Expression.Call(constant, LinqProviderStatic.ToUpper);
            }


            // Determine how we want to apply the expression
            switch (filter.Predicate)
            {
            case CriterionPredicate.Eq:
            case CriterionPredicate.Null:
                _expression = Expression.Equal(member, constant);
                break;

            case CriterionPredicate.Neq:
            case CriterionPredicate.NotNull:
                _expression = Expression.NotEqual(member, constant);
                break;

            case CriterionPredicate.Gt:
                _expression = Expression.GreaterThan(member, constant);
                break;

            case CriterionPredicate.GtEq:
                _expression = Expression.GreaterThanOrEqual(member, constant);
                break;

            case CriterionPredicate.Lt:
                _expression = Expression.LessThan(member, constant);
                break;

            case CriterionPredicate.LtEq:
                _expression = Expression.LessThanOrEqual(member, constant);
                break;

            case CriterionPredicate.Contains:
                //return Expression.AndAlso(Expression.NotEqual(member, Expression.Constant(null)),
                //Expression.Call(member, PaggedLinqBaseStatics.ContainsMethod, constant));
                _expression = Expression.Call(Expression.Coalesce(member, LinqProviderStatic.EmptyStr), LinqProviderStatic.ContainsMethod, constant);
                break;

            case CriterionPredicate.StartsWith:
                _expression = Expression.Call(Expression.Coalesce(member, LinqProviderStatic.EmptyStr), LinqProviderStatic.StartsWithMethod, constant);
                break;

            case CriterionPredicate.EndsWith:
                _expression = Expression.Call(Expression.Coalesce(member, LinqProviderStatic.EmptyStr), LinqProviderStatic.EndsWithMethod, constant);
                break;
            }
        }
Ejemplo n.º 2
0
        public QueryPaggedBase <TItem, TResult> AddFiltering(Expression <Func <TItem, object> > memberSelector, object criterion, CriterionPredicate predicate = CriterionPredicate.Eq, bool ignoreCase = false)
        {
            if (_filtering == null)
            {
                _filtering = new FilteringCollection();
            }
            _filtering.Add(FilteringDescriptor.Get(memberSelector, criterion, predicate, ignoreCase));

            return(this);
        }
Ejemplo n.º 3
0
        void IQueryVisitor.Visit(FilteringDescriptor fd)
        {
            Tuple <string, bool> p = GetSqlPredicate(fd.Predicate);

            if (p.Item2)
            {
                _bld.AppendFormat("[{0}] {1} {2}", fd.Field, p.Item1, Quote(fd.Criterion, fd.Predicate));
            }
            else
            {
                _bld.AppendFormat("[{0}] {1}", fd.Field, p.Item1);
            }
        }
Ejemplo n.º 4
0
        public void TestLinqWIthConversion()
        {
            var f1 = new FilteringDescriptor()
            {
                Field = "f1", Predicate = CriterionPredicate.Gt, Criterion = "sss"
            };
            var f2 = new FilteringDescriptor()
            {
                Field = "f1", Predicate = CriterionPredicate.Gt, Criterion = "sss"
            };
            var f3 = new FilteringDescriptor()
            {
                Predicate = CriterionPredicate.Gt, Criterion = "sss"
            };
            var f4 = new FilteringDescriptor()
            {
                Field = "f1", Predicate = CriterionPredicate.Gt
            };
            var f5 = new FilteringDescriptor()
            {
                Field = "f1", Predicate = CriterionPredicate.Lt, Criterion = "sss"
            };
            var f6 = new FilteringDescriptor()
            {
                Field = "f2", Predicate = CriterionPredicate.Gt, Criterion = "sss"
            };
            var f7 = new FilteringDescriptor()
            {
                Field = "f1", Predicate = CriterionPredicate.Gt, Criterion = "sss2"
            };

            Assert.IsTrue(f1 == f2);
            Assert.IsFalse(f1 == f3);
            Assert.IsFalse(f1 == f4);
            Assert.IsFalse(f1 == f5);
            Assert.IsFalse(f1 == f6);
            Assert.IsFalse(f1 == f7);

            Assert.IsFalse(f1 < f2);
            Assert.IsFalse(f1 < f3);
            Assert.IsFalse(f1 < f4);
            Assert.IsFalse(f1 < f5);
            Assert.IsTrue(f1 < f6);
            Assert.IsTrue(f1 < f7);
        }
Ejemplo n.º 5
0
 void IQueryVisitor.Visit(FilteringDescriptor fd)
 {
     Tuple<string, bool> p = GetSqlPredicate(fd.Predicate);
     if (p.Item2)
         _bld.AppendFormat("[{0}] {1} {2}", fd.Field, p.Item1, Quote(fd.Criterion, fd.Predicate));
     else
         _bld.AppendFormat("[{0}] {1}", fd.Field, p.Item1);
 }