Example #1
0
        protected override Expression VisitSelect(SelectExpression select)
        {
            if (select.From != null && select.From.NodeType == (ExpressionType)DbExpressionType.Table)
            {
                var table       = (TableExpression)select.From;
                var expressions = GlobalQueryPolicy.GetPolicies(table.Type);
                if (expressions.IsNullOrEmpty())
                {
                    return(select);
                }

                var columns = select.Columns;
                var where = select.Where;

                foreach (var exp in expressions)
                {
                    where = PolicyConditionReplacer.Replace(where, exp, columns);
                }

                return(select.Update(select.From, where, select.OrderBy, select.GroupBy, select.Skip, select.Take,
                                     select.Segment, select.IsDistinct, select.Columns, select.Having, select.IsReverse));
            }
            else if (select.From != null)
            {
                var from = base.Visit(select.From);
                return(select.Update(from, select.Where, select.OrderBy, select.GroupBy, select.Skip, select.Take,
                                     select.Segment, select.IsDistinct, select.Columns, select.Having, select.IsReverse));
            }

            return(select);
        }
Example #2
0
            public static Expression Replace(Expression where, Expression expression, IEnumerable <ColumnDeclaration> columns)
            {
                var visitor = new PolicyConditionReplacer {
                    _where = where, _columns = columns
                };

                visitor.Visit(PartialEvaluator.Eval(expression));
                return(visitor._where);
            }