예제 #1
0
		public override IAggregator CreateAggregator(Type inputType)
		{
			if (inputType == null)
				throw ExceptionBuilder.ArgumentNull("inputType");

			SumAggregateBinding sumAggregate = new SumAggregateBinding(String.Empty);
			IAggregator sumAggregator = sumAggregate.CreateAggregator(inputType);
			if (sumAggregator == null)
				return null;

			Expression<object> avgExpression = new Expression<object>();
			ParameterBinding sumParam = avgExpression.Parameters.Add("@Sum", sumAggregator.ReturnType);
			ParameterBinding countParam = avgExpression.Parameters.Add("@Count", typeof(int));
			avgExpression.Text = "@Sum / @Count";

			try
			{
				avgExpression.Resolve();
			}
			catch (CompilationException)
			{
				return null;
			}

			return new AverageAggregator(sumAggregator, avgExpression, sumParam, countParam);
		}
        public override IAggregator CreateAggregator(Type inputType)
        {
            if (inputType == null)
            {
                throw ExceptionBuilder.ArgumentNull("inputType");
            }

            SumAggregateBinding sumAggregate  = new SumAggregateBinding(String.Empty);
            IAggregator         sumAggregator = sumAggregate.CreateAggregator(inputType);

            if (sumAggregator == null)
            {
                return(null);
            }

            Expression <object> avgExpression = new Expression <object>();
            ParameterBinding    sumParam      = avgExpression.Parameters.Add("@Sum", sumAggregator.ReturnType);
            ParameterBinding    countParam    = avgExpression.Parameters.Add("@Count", typeof(int));

            avgExpression.Text = "@Sum / @Count";

            try
            {
                avgExpression.Resolve();
            }
            catch (CompilationException)
            {
                return(null);
            }

            return(new AverageAggregator(sumAggregator, avgExpression, sumParam, countParam));
        }