LINQ ile diziyi birden fazla alana göre sıralamak

Şubat 2012 | İbrahim Aydın, Bilgisayar Mühendisi
C# altında, LINQ metotlarını/sorgularını kullanarak, dizi veya numaralandırılabilir (enumarable)
biçimdeki tanımlar üzerinde bir çok faydalı işlemi zahmetsiz bir
şekilde halledebiliyoruz. Bu işlemlerden birisi de tabii ki dizi
elemanlarını sıralayabilmek...

Ogrenci[] ogrenciler = ogrenciServisi.TumOgrencileriGetir();
ogrenciler = ogrenciler.OrderByDescending(ogr =>
ogr.KayitTarihi).ToArray();

Yaptığımız bu işlem ile; herhangi bir kaynaktan elde ettiğimiz 'Ogrenci'
tipine ait bir diziyi, 'KayitTarihi' alanına göre tersten sıraladık.
Peki eğer kayıt tarihine göre sıraladığımız bu dizide, aynı kayıt
tarihine sahip öğrencileri de isimlerine göre kendi aralarında sıralamak
istersek? Yani SQL'de kullandığımız 'order by KayitTarihi desc, Adi
asc' ifadesinin eşdeğerini yapmak istersek? Bu durumda
kullanabileceğimiz 'ThenBy' ve 'ThenByDescending' metotları da
bulunmaktadır.

Ogrenci[] ogrenciler = ogrenciServisi.TumOgrencileriGetir();
ogrenciler = ogrenciler.OrderByDescending(ogr =>
ogr.KayitTarihi).ThenBy(ogr=> ogr.Adi).ToArray();

LINQ sorgulama cümlelerini kullanmayı, LINQ metotları ve lambda
expression kullanmaya tercih ediyorsanız, yaptığımız bu işlemin
karşılığı şu şekilde olacaktır:

Ogrenci[] ogrenciler = (from ogr in ogrenciler 
orderby ogr.KayitTarihi descending, 
ogr.Adi select ogr).ToArray();

...