Это в значительной степени зависит от типа ключа. Но давайте на минуту предположим, что они являются строками. Вы можете использовать следующий запрос LINQ
Hashtable table = GetHashTable();
var keys = table.Keys.Cast<String>().OrderBy(x => x);
Для более сложных структур запрос LINQ немного отличается. Предположим, у вас было следующее определение для ключа
struct Name {
public string First;
public string Last;
// Equality code omitted
}
Код LINQ будет следующим
Hashtable table = GetHashtable();
var keys = table.Keys.Cast<Name>().OrderBy(x => x.First).ThenBy(x => x.Last);