Ale w czym jest problem? Ja przetestowałem na takim przykładzie:
List lista = new List();
string[] a = { "a", "b", "c" };
string[] b = { "b", "b", "c" };
string[] c = { "c", "b", "c" };
lista.Add(c);
lista.Add(b);
lista.Add(a);
var sort = from s in lista
orderby s[0]
select s;
List nowaLista = new List();
nowaLista.AddRange(sort);
Ok. To by się zgadzało. Zakładając że wynikiem w takim zapisie jest pusta lista.
Otóż jak działa LINQ. W zmiennej sort nie masz listy posortowanych elementów tylko query powiązane z obiektem IEnumerable. Dopiero w momencie użycia zmiennej czyli w twoim przypadku w
staraLista.AddRange(sort);
jest wykonywane zapytanie. Ale w tym momencie oryginalna lista jest już pusta.
Mam nadzieję, że wyjaśniłem to w miarę przystępnie.