Skip to content

LINQ Temelleri

Genel Bakış

LINQ (Language Integrated Query), C#'ta veri sorgulama için kullanılan güçlü bir özelliktir. LINQ sayesinde, farklı veri kaynaklarından (koleksiyonlar, veritabanları, XML vb.) veri sorgulama işlemleri tutarlı bir şekilde yapılabilir.

LINQ Sorgu Sözdizimi

  1. Method Syntax

    var numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = numbers.Where(n => n % 2 == 0)
                            .OrderBy(n => n)
                            .ToList();
    

  2. Query Syntax

    var numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = (from n in numbers
                      where n % 2 == 0
                      orderby n
                      select n).ToList();
    

Temel LINQ Operatörleri

  1. Filtreleme

    // Where
    var adults = people.Where(p => p.Age >= 18);
    
    // OfType
    var strings = objects.OfType<string>();
    

  2. Projeksiyon

    // Select
    var names = people.Select(p => p.Name);
    
    // SelectMany
    var allPhones = people.SelectMany(p => p.Phones);
    

  3. Sıralama

    // OrderBy
    var sortedByName = people.OrderBy(p => p.Name);
    
    // ThenBy
    var sorted = people.OrderBy(p => p.Age)
                      .ThenBy(p => p.Name);
    

  4. Gruplama

    // GroupBy
    var groups = people.GroupBy(p => p.City);
    
    // Her grup için işlem
    foreach (var group in groups)
    {
        Console.WriteLine($"Şehir: {group.Key}");
        foreach (var person in group)
        {
            Console.WriteLine($"  - {person.Name}");
        }
    }
    

  5. Birleştirme

    // Join
    var joined = from p in people
                join c in cities on p.CityId equals c.Id
                select new { p.Name, c.CityName };
    

LINQ ve Koleksiyonlar

  1. Listeler

    List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
    var sum = numbers.Sum();
    var avg = numbers.Average();
    var max = numbers.Max();
    

  2. Diziler

    int[] numbers = { 1, 2, 3, 4, 5 };
    var first = numbers.First();
    var last = numbers.Last();
    var single = numbers.Single(n => n == 3);
    

  3. Dictionary

    Dictionary<int, string> dict = new Dictionary<int, string>();
    var keys = dict.Keys.Where(k => k > 10);
    var values = dict.Values.Where(v => v.StartsWith("A"));
    

LINQ ve Null Kontrolü

// Null kontrolü
var nonNullNames = people.Where(p => p?.Name != null)
                        .Select(p => p.Name);

// Default değer atama
var firstOrDefault = numbers.FirstOrDefault(n => n > 10, -1);

LINQ ve Performans

  1. Deferred Execution

    // Sorgu henüz çalıştırılmadı
    var query = numbers.Where(n => n % 2 == 0);
    
    // Sorgu çalıştırıldı
    var result = query.ToList();
    

  2. Immediate Execution

    // Sorgu hemen çalıştırıldı
    var count = numbers.Count(n => n % 2 == 0);
    var sum = numbers.Sum();
    

LINQ Best Practices

  1. Performans Optimizasyonu

    // Kötü
    var result = numbers.Where(n => n % 2 == 0)
                       .OrderBy(n => n)
                       .Where(n => n > 10)
                       .ToList();
    
    // İyi
    var result = numbers.Where(n => n % 2 == 0 && n > 10)
                       .OrderBy(n => n)
                       .ToList();
    

  2. Null Kontrolü

    // Kötü
    var names = people.Select(p => p.Name.ToUpper());
    
    // İyi
    var names = people.Where(p => p?.Name != null)
                     .Select(p => p.Name.ToUpper());
    

Mülakat Soruları

  1. LINQ Temelleri
  2. LINQ nedir ve ne işe yarar?
  3. LINQ sorgu sözdizimleri nelerdir?
  4. LINQ'in avantajları nelerdir?

  5. LINQ Operatörleri

  6. Temel LINQ operatörleri nelerdir?
  7. Where ve Select operatörleri nasıl kullanılır?
  8. GroupBy ve Join operatörleri ne işe yarar?

  9. LINQ ve Performans

  10. Deferred Execution nedir?
  11. LINQ sorgularında performans nasıl optimize edilir?
  12. LINQ sorgularında memory kullanımı nasıl kontrol edilir?

  13. LINQ ve Null Handling

  14. LINQ sorgularında null kontrolü nasıl yapılır?
  15. FirstOrDefault ve SingleOrDefault arasındaki farklar nelerdir?
  16. Null-conditional operatörler LINQ'de nasıl kullanılır?

  17. LINQ ve Koleksiyonlar

  18. LINQ hangi koleksiyon tipleriyle kullanılabilir?
  19. IEnumerable ve IQueryable arasındaki farklar nelerdir?
  20. LINQ sorguları koleksiyonları nasıl etkiler?

  21. LINQ ve Veritabanı

  22. LINQ to SQL nedir?
  23. Entity Framework'te LINQ nasıl kullanılır?
  24. LINQ sorguları veritabanında nasıl çalıştırılır?

  25. LINQ ve Lambda

  26. LINQ ve Lambda ifadeleri arasındaki ilişki nedir?
  27. Lambda ifadeleri LINQ sorgularında nasıl kullanılır?
  28. Expression ve Func delegate'leri LINQ'de nasıl kullanılır?

  29. LINQ ve Asenkron Programlama

  30. Asenkron LINQ sorguları nasıl yazılır?
  31. Task ve LINQ nasıl birlikte kullanılır?
  32. Asenkron LINQ sorgularında exception handling nasıl yapılır?

  33. LINQ Best Practices

  34. LINQ sorguları yazarken dikkat edilmesi gerekenler nelerdir?
  35. LINQ sorgularında okunabilirlik nasıl sağlanır?
  36. LINQ sorgularında test edilebilirlik nasıl sağlanır?

  37. LINQ ve Fonksiyonel Programlama

    • LINQ fonksiyonel programlama prensiplerini nasıl kullanır?
    • LINQ'de immutability nasıl sağlanır?
    • LINQ ve higher-order fonksiyonlar arasındaki ilişki nedir?

Örnek Kod Soruları

  1. LINQ ile Filtreleme

    public static IEnumerable<T> Filter<T>(IEnumerable<T> source, Func<T, bool> predicate)
    {
        // Implementasyon
    }
    

  2. LINQ ile Gruplama

    public static IEnumerable<IGrouping<TKey, T>> GroupBy<T, TKey>(
        IEnumerable<T> source, 
        Func<T, TKey> keySelector)
    {
        // Implementasyon
    }
    

  3. LINQ ile Birleştirme

    public static IEnumerable<TResult> Join<T, TInner, TKey, TResult>(
        IEnumerable<T> outer,
        IEnumerable<TInner> inner,
        Func<T, TKey> outerKeySelector,
        Func<TInner, TKey> innerKeySelector,
        Func<T, TInner, TResult> resultSelector)
    {
        // Implementasyon
    }
    

  4. LINQ ile Sıralama

    public static IOrderedEnumerable<T> OrderBy<T, TKey>(
        IEnumerable<T> source,
        Func<T, TKey> keySelector)
    {
        // Implementasyon
    }
    

  5. LINQ ile Agregasyon

    public static T Aggregate<T>(
        IEnumerable<T> source,
        Func<T, T, T> func)
    {
        // Implementasyon
    }
    

Kaynaklar