/// <summary>
 /// The child collection.
 /// </summary>
 /// <param name="value">
 /// The <see cref="ProductCollection"/>.
 /// </param>
 /// <param name="predicate">
 /// An optional lambda expression
 /// </param>
 /// <returns>
 /// The <see cref="IEnumerable{ProductCollectionr}"/>.
 /// </returns>
 public static IEnumerable<IProductCollection> Children(this IProductCollection value, Expression<Func<IProductCollection, bool>> predicate = null)
 {
     return value.AsTreeNode().Children.Values(predicate);
 }
 /// <summary>
 /// Gets the first ancestor matching the expression
 /// </summary>
 /// <param name="value">
 /// The value.
 /// </param>
 /// <param name="predicate">
 /// The predicate.
 /// </param>
 /// <returns>
 /// The <see cref="IProductCollection"/>.
 /// </returns>
 public static IProductCollection Ancestor(this IProductCollection value, Expression<Func<IProductCollection, bool>> predicate)
 {
     return value.AsTreeNode().Ancestors().Values(predicate).FirstOrDefault();
 }
 /// <summary>
 /// Gets the siblings of the <see cref="IProductCollection"/> including itself.
 /// </summary>
 /// <param name="value">
 /// The value.
 /// </param>
 /// <param name="predicate">
 /// An optional lambda expression
 /// </param>
 /// <returns>
 /// The <see cref="IEnumerable{IProductCollection}"/>.
 /// </returns>
 public static IEnumerable<IProductCollection> AncestorsOrSelf(this IProductCollection value, Expression<Func<IProductCollection, bool>> predicate = null)
 {
     return value.AsTreeNode().AncestorsOrSelf().Values(predicate);
 }
 /// <summary>
 /// Gets the descendants of the <see cref="IProductCollection"/>.
 /// </summary>
 /// <param name="value">
 /// The value.
 /// </param>
 /// <param name="predicate">
 /// An optional lambda expression
 /// </param>
 /// <returns>
 /// The <see cref="IEnumerable{IProductCollection}"/>.
 /// </returns>
 public static IEnumerable<IProductCollection> Descendants(this IProductCollection value, Expression<Func<IProductCollection, bool>> predicate = null)
 {
     return value.AsTreeNode().Descendants().Values(predicate);
 }