I am trying to understand more about linq, for example, if I want to implement a Select I will implement like this
public static IEnumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
    foreach (var item in source)
    {
        yield return selector(item);
    }
}
where like this
public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    foreach (var item in source)
    {
        if (predicate(item))
            yield return item;
    }
}
How about OrderBy?
Take a look at this. I think you'll find it very useful. Basically, Jon Skeet re-implements everything in Linq as a learning exercise. Very informative.
The second part talks about implementing Where... and so on till parts that describes OrderBy.
To follow you current implementation pattern you could try this:
public static IEnumerable<TSource> OrderBy<TSource, TKey>(
    IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    var items = source.ToArray();
    var keys = items.Select(keySelector).ToArray();
    Array.Sort(keys, items);
    foreach (var item in items)
    {
        yield return item;
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With