Esempio n. 1
0
 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);
        }
Esempio n. 4
0
 /// <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)
 {
 }
Esempio n. 5
0
 /// <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);
 }
Esempio n. 6
0
 /// <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)
 {
 }
Esempio n. 7
0
 /// <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);
 }
Esempio n. 8
0
        // 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);
 }
Esempio n. 11
0
 /// <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);
 }