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); }
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); }