private static IList <IRouteValueProjection> Expand(this IRouteValueProjection projection)
        {
            var chained = projection as ChainedRouteValueProjection;

            return(chained != null ? chained.Projections : new[] { projection });
        }
 /// <summary>
 /// Joins two projections into the chain.
 /// </summary>
 /// <param name="first">The first projection.</param>
 /// <param name="second">The second projection.</param>
 /// <returns>The chained projection.</returns>
 public static ChainedRouteValueProjection And(this IRouteValueProjection first, IRouteValueProjection second)
 {
     return(new ChainedRouteValueProjection(first.Expand().Concat(second.Expand())));
 }