Ejemplo n.º 1
0
        private static IEnumerable <AggregateTokenBase> MergeEntitySetAggregates(IEnumerable <AggregateTokenBase> tokens)
        {
            List <AggregateTokenBase> mergedTokens = new List <AggregateTokenBase>();
            Dictionary <string, AggregateTokenBase> entitySetTokens = new Dictionary <string, AggregateTokenBase>();

            foreach (AggregateTokenBase token in tokens)
            {
                switch (token.Kind)
                {
                case QueryTokenKind.EntitySetAggregateExpression:
                {
                    AggregateTokenBase      currentValue;
                    EntitySetAggregateToken entitySetToken = token as EntitySetAggregateToken;
                    string key = entitySetToken.Path();

                    if (entitySetTokens.TryGetValue(key, out currentValue))
                    {
                        entitySetTokens.Remove(key);
                    }

                    entitySetTokens.Add(key, EntitySetAggregateToken.Merge(entitySetToken, currentValue as EntitySetAggregateToken));
                    break;
                }

                case QueryTokenKind.AggregateExpression:
                {
                    mergedTokens.Add(token);
                    break;
                }
                }
            }

            return(mergedTokens.Concat(entitySetTokens.Values).ToList());
        }