internal DbGroupByExpression( TypeUsage collectionOfRowResultType, DbGroupExpressionBinding input, DbExpressionList groupKeys, ReadOnlyCollection <DbAggregate> aggregates) : base(DbExpressionKind.GroupBy, collectionOfRowResultType, true) { this._input = input; this._keys = groupKeys; this._aggregates = aggregates; }
internal DbGroupByExpression( TypeUsage collectionOfRowResultType, DbGroupExpressionBinding input, DbExpressionList groupKeys, ReadOnlyCollection <DbAggregate> aggregates) : base(DbExpressionKind.GroupBy, collectionOfRowResultType) { DebugCheck.NotNull(input); DebugCheck.NotNull(groupKeys); DebugCheck.NotNull(aggregates); Debug.Assert(groupKeys.Count > 0 || aggregates.Count > 0, "At least one key or aggregate is required"); _input = input; _keys = groupKeys; _aggregates = aggregates; }
protected virtual DbGroupExpressionBinding VisitGroupExpressionBinding(DbGroupExpressionBinding binding) { var result = binding; if (binding != null) { var newInput = VisitExpression(binding.Expression); if (!ReferenceEquals(binding.Expression, newInput)) { result = CqtBuilder.GroupBindAs(newInput, binding.VariableName, binding.GroupVariableName); RebindVariable(binding.Variable, result.Variable); RebindVariable(binding.GroupVariable, result.GroupVariable); } } return(result); }
/// <summary> /// Convenience method for post-processing after a DbGroupExpressionBinding has been visited. /// </summary> /// <param name="binding"> The previously visited DbGroupExpressionBinding. </param> protected virtual void VisitGroupExpressionBindingPost(DbGroupExpressionBinding binding) { }
/// <summary> /// Convenience method to visit the specified <see cref="DbGroupExpressionBinding" />. /// </summary> /// <param name="binding"> The DbGroupExpressionBinding to visit. </param> /// <exception cref="ArgumentNullException"> /// <paramref name="binding" /> /// is null /// </exception> protected virtual void VisitGroupExpressionBindingPre(DbGroupExpressionBinding binding) { Check.NotNull(binding, "binding"); VisitExpression(binding.Expression); }
/// <summary> /// Convenience method for post-processing after a DbGroupExpressionBinding has been visited. /// </summary> /// <param name="binding"> The previously visited DbGroupExpressionBinding. </param> protected virtual void VisitGroupExpressionBindingPost(DbGroupExpressionBinding binding) { }
/// <summary> /// Convenience method to visit the specified <see cref="DbGroupExpressionBinding" />. /// </summary> /// <param name="binding"> The DbGroupExpressionBinding to visit. </param> /// <exception cref="ArgumentNullException"> /// <paramref name="binding" /> /// is null /// </exception> protected virtual void VisitGroupExpressionBindingPre(DbGroupExpressionBinding binding) { Check.NotNull(binding, "binding"); VisitExpression(binding.Expression); }
// Utility translator method for lambda expressions that are part of group by. Given a lambda expression and its translated // inputs, translates the lambda expression, assuming the input needs to be used as a grouping input private DbExpression TranslateLambda(LambdaExpression lambda, DbExpression input, out DbGroupExpressionBinding binding) { input = NormalizeSetSource(input); // create binding context for this lambda expression var alias = _aliasGenerator.Next(); binding = input.GroupBindAs(alias, string.Format(CultureInfo.InvariantCulture, "Group{0}", alias)); return TranslateLambda(lambda, binding.Variable); }
protected virtual void VisitGroupExpressionBindingPre(DbGroupExpressionBinding binding) { if (binding == null) throw new ArgumentException("binding"); VisitExpression(binding.Expression); }
/// <summary> /// Convenience method to visit the specified <see cref="DbGroupExpressionBinding"/>. /// </summary> /// <param name="binding">The DbGroupExpressionBinding to visit.</param> /// <exception cref="ArgumentNullException"><paramref name="binding"/> is null</exception> protected virtual void VisitGroupExpressionBindingPre(DbGroupExpressionBinding binding) { ADP1.CheckArgumentNull(binding, "binding"); VisitExpression(binding.Expression); }
/// <summary> /// Convenience method to visit the specified <see cref="T:System.Data.Entity.Core.Common.CommandTrees.DbGroupExpressionBinding" />. /// </summary> /// <param name="binding"> The DbGroupExpressionBinding to visit. </param> /// <exception cref="T:System.ArgumentNullException"> /// <paramref name="binding" /> /// is null /// </exception> protected virtual void VisitGroupExpressionBindingPre(DbGroupExpressionBinding binding) { Check.NotNull <DbGroupExpressionBinding>(binding, nameof(binding)); this.VisitExpression(binding.Expression); }