[C#] Sortowanie listy, linq

Cześć

Mam taką listę

List Lista = new ();

chciałbym ją posortować za pomocą linq na podstawie wartości w pierwszym elemencie tablicy string. próbowałem tak

var sort = from s in Lista

               orderby s[0]

               select s;

List NowaLista = new ();

NowaLista.AddRange(sort);

Może powinienem inaczej obsłużyć kolekcję powstałą po poleceniu linq ?

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);

i działa tak jak powinno. (Tak jak w zamyśle).

Jednak zle napisalem.

Ja robilem tak

staraLista.Clear();

StaraLista.AddRange(sort);

Jestem teraz na Tel i nie sprawdze

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.

Rozumiem. To tak jakbym stworzył w SQL widok i wyczyścił tabelę. Widoki nie przechowują danych tylko są zwykłymi zapytaniami. Ok dzięki.

Zamiast tego:

staraLista.Clear();

StaraLista.AddRange(sort);

taki kod powinien wykonać to co chcesz uzyskać:

staraLista = sort.ToList();