To follow you current implementation pattern you could try this:
public static IEnumerable OrderBy(
IEnumerable source, Func keySelector)
{
var items = source.ToArray();
var keys = items.Select(keySelector).ToArray();
Array.Sort(keys, items);
foreach (var item in items)
{
yield return item;
}
}