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¶
-
Method Syntax
var numbers = new List<int> { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(n => n % 2 == 0) .OrderBy(n => n) .ToList();
-
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¶
-
Filtreleme
// Where var adults = people.Where(p => p.Age >= 18); // OfType var strings = objects.OfType<string>();
-
Projeksiyon
// Select var names = people.Select(p => p.Name); // SelectMany var allPhones = people.SelectMany(p => p.Phones);
-
Sıralama
// OrderBy var sortedByName = people.OrderBy(p => p.Name); // ThenBy var sorted = people.OrderBy(p => p.Age) .ThenBy(p => p.Name);
-
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}"); } }
-
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¶
-
Listeler
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var sum = numbers.Sum(); var avg = numbers.Average(); var max = numbers.Max();
-
Diziler
int[] numbers = { 1, 2, 3, 4, 5 }; var first = numbers.First(); var last = numbers.Last(); var single = numbers.Single(n => n == 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¶
-
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();
-
Immediate Execution
// Sorgu hemen çalıştırıldı var count = numbers.Count(n => n % 2 == 0); var sum = numbers.Sum();
LINQ Best Practices¶
-
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();
-
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ı¶
- LINQ Temelleri
- LINQ nedir ve ne işe yarar?
- LINQ sorgu sözdizimleri nelerdir?
-
LINQ'in avantajları nelerdir?
-
LINQ Operatörleri
- Temel LINQ operatörleri nelerdir?
- Where ve Select operatörleri nasıl kullanılır?
-
GroupBy ve Join operatörleri ne işe yarar?
-
LINQ ve Performans
- Deferred Execution nedir?
- LINQ sorgularında performans nasıl optimize edilir?
-
LINQ sorgularında memory kullanımı nasıl kontrol edilir?
-
LINQ ve Null Handling
- LINQ sorgularında null kontrolü nasıl yapılır?
- FirstOrDefault ve SingleOrDefault arasındaki farklar nelerdir?
-
Null-conditional operatörler LINQ'de nasıl kullanılır?
-
LINQ ve Koleksiyonlar
- LINQ hangi koleksiyon tipleriyle kullanılabilir?
- IEnumerable ve IQueryable arasındaki farklar nelerdir?
-
LINQ sorguları koleksiyonları nasıl etkiler?
-
LINQ ve Veritabanı
- LINQ to SQL nedir?
- Entity Framework'te LINQ nasıl kullanılır?
-
LINQ sorguları veritabanında nasıl çalıştırılır?
-
LINQ ve Lambda
- LINQ ve Lambda ifadeleri arasındaki ilişki nedir?
- Lambda ifadeleri LINQ sorgularında nasıl kullanılır?
-
Expression ve Func delegate'leri LINQ'de nasıl kullanılır?
-
LINQ ve Asenkron Programlama
- Asenkron LINQ sorguları nasıl yazılır?
- Task ve LINQ nasıl birlikte kullanılır?
-
Asenkron LINQ sorgularında exception handling nasıl yapılır?
-
LINQ Best Practices
- LINQ sorguları yazarken dikkat edilmesi gerekenler nelerdir?
- LINQ sorgularında okunabilirlik nasıl sağlanır?
-
LINQ sorgularında test edilebilirlik nasıl sağlanır?
-
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ı¶
-
LINQ ile Filtreleme
public static IEnumerable<T> Filter<T>(IEnumerable<T> source, Func<T, bool> predicate) { // Implementasyon }
-
LINQ ile Gruplama
public static IEnumerable<IGrouping<TKey, T>> GroupBy<T, TKey>( IEnumerable<T> source, Func<T, TKey> keySelector) { // Implementasyon }
-
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 }
-
LINQ ile Sıralama
public static IOrderedEnumerable<T> OrderBy<T, TKey>( IEnumerable<T> source, Func<T, TKey> keySelector) { // Implementasyon }
-
LINQ ile Agregasyon
public static T Aggregate<T>( IEnumerable<T> source, Func<T, T, T> func) { // Implementasyon }