/// <inheritdoc/> protected override Provider VisitCalculate(CalculateProvider provider) { OnRecursionEntrance(provider); var source = VisitCompilable(provider.Source); OnRecursionExit(provider); var translated = false; var descriptors = new List <CalculatedColumnDescriptor>(provider.CalculatedColumns.Length); foreach (var column in provider.CalculatedColumns) { var expression = translate(provider, column.Expression); if (expression != column.Expression) { translated = true; } var ccd = new CalculatedColumnDescriptor(column.Name, column.Type, (Expression <Func <Tuple, object> >)expression); descriptors.Add(ccd); } if (!translated && source == provider.Source) { return(provider); } return(new CalculateProvider(source, descriptors.ToArray())); }
/// <summary> /// Visits <see cref="CalculateProvider"/>. /// </summary> /// <param name="provider">Calculate provider.</param> protected abstract Provider VisitCalculate(CalculateProvider provider);