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()); }