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