protected override Expression VisitBinary(BinaryExpression node) { if (node.NodeType != ExpressionType.Equal) { return(null); } ValueToAggregateVisitor <TIn> visV = new ValueToAggregateVisitor <TIn>(); visV.Visit(node.Left); this.FilteredPropertyInfo = visV.SourcePropertyInfo; ConstantVisitor <TIn> visC = new ConstantVisitor <TIn>(); visC.Visit(node.Right); this.Filter = visC.Filter; return(null); }
protected override Expression VisitMethodCall(MethodCallExpression node) { var aggregationInstanceAttribute = node.Method.GetCustomAttribute <AggregationInstanceAttribute>(); if (aggregationInstanceAttribute == null) { throw new InvalidOperationException(); } this.AggregationInstanceType = aggregationInstanceAttribute.AggregationInstanceType; if (node.Arguments.Count > 0) { ValueToAggregateVisitor <TIn> vis = new ValueToAggregateVisitor <TIn>(); try { vis.Visit(node.Arguments[0]); this.SourcePropertyInfo = vis.SourcePropertyInfo; } catch { } } return(null); }