Ana içeriğe geç

LINQ ile Performanslı Sıralama: OrderBy Kullanımı

Veri sıralama işlemleri, genellikle büyük veri kümelerinde performansı etkileyen önemli bir adımdır. LINQ OrderBy ve ThenBy metotları ile sıralama işlemleri gerçekleştirilir.


1. OrderBy ve ThenBy Nedir?

  • OrderBy: Veriyi belirli bir sütuna göre artan sırada sıralar.
  • ThenBy: Önceki sıralama kriterinden sonra ikinci bir sıralama uygular.

Örnek Kullanım:

var sortedData = data.OrderBy(x => x.Name).ThenBy(x => x.Age).ToList();

Bu kod, Name alanına göre artan sıralama yapar. Eğer Name aynıysa, Age alanına göre sıralama yapar.


2. Yanlış ve İdeal Kullanım

Yanlış Kullanım: Çok sayıda sıralama işlemi

Yanlış Kullanım:

var sortedData = data
    .OrderBy(x => x.Name)
    .OrderBy(x => x.Age)
    .ToList();

Bu kod, her OrderBy çağrısında sıralama işlemini yeniden başlatır. Bu nedenle performans kaybına neden olur.


İdeal Kullanım: ThenBy ile sıralamaları birleştirme

İdeal Kullanım:

var sortedData = data
    .OrderBy(x => x.Name)
    .ThenBy(x => x.Age)
    .ToList();

Bu yöntem, sıralamaları birleştirerek daha verimli bir işlem yapar.


3. Sıralama Performansını Artırmak

1. AsQueryable Kullanımı

Veri tabanı sorgularında, sıralama işlemini belleğe taşımadan önce veritabanında gerçekleştirmek daha performanslıdır.

Örnek:

var sortedData = context.Customers
    .AsQueryable()
    .OrderBy(x => x.Name)
    .ToList();

2. Sütun İndeksleri

Veritabanında sıralama yapılan sütunlarda indeks oluşturmak, sıralama performansını ciddi şekilde artırır.

CREATE INDEX idx_name ON Customers (Name);

3. Azalan Sıralama (Descending Order)

LINQ OrderByDescending ile veriyi azalan sırada sıralayabilirsiniz.

Örnek:

var sortedData = data.OrderByDescending(x => x.Date).ToList();

4. Dinamik Sıralama

Kullanıcıdan gelen girişlere bağlı olarak sıralama yapmak gerekebilir.

Örnek:

public List<T> SortData<T>(IQueryable<T> query, string sortColumn, bool ascending)
{
    var parameter = Expression.Parameter(typeof(T), "x");
    var property = Expression.Property(parameter, sortColumn);
    var lambda = Expression.Lambda<Func<T, object>>(Expression.Convert(property, typeof(object)), parameter);

    return ascending
        ? query.OrderBy(lambda).ToList()
        : query.OrderByDescending(lambda).ToList();
}

// Kullanım
var sortedCustomers = SortData(context.Customers, "Name", true);

5. Birden Fazla Alan ile Sıralama

Birden fazla alanı sıralama kriteri olarak belirlemek için ThenBy ve ThenByDescending kullanılabilir.

Örnek:

var sortedData = data
    .OrderBy(x => x.LastName)
    .ThenByDescending(x => x.FirstName)
    .ToList();

Bu kod, önce LastName alanına göre sıralama yapar, aynı değerlerde ise FirstName alanına göre azalan sıralama yapar.


6. Performans Testi

Sıralama işlemlerinin performansını ölçmek için Stopwatch kullanabilirsiniz.

Örnek:

var stopwatch = Stopwatch.StartNew();

var sortedData = data.OrderBy(x => x.Name).ToList();

stopwatch.Stop();
Console.WriteLine($"Sıralama süresi: {stopwatch.ElapsedMilliseconds} ms");