This is a great addition. However we can be a little smarter. The `base(query)` call is essentially a call to `base(query, ie => ie.Cast<TCollection>())` which performs a cast on every element. Casts are expensive and we insert our own `Func<IE<T>,IE<T>>` by just returning ourselves, `base(query, ie => ie)`. However we need to be more explicit since the compiler does not understand which overload to choose, so we need to change it to `base(query, (Func<IEnumerable<T>,IEnumerable<T>>)(t => t))`.