VuePressVuePress
Home
Get Started
Home
Get Started
  • Temel Kavramlar

    • Type Declarations (Tur Bildirimleri)
    • Access Modifiers (Erişim Değiştiricileri)
    • Erişimci (Accessor)
  • Metotlar ve İşlemler

    • Metotlar (Methods)
    • Geri Dönüş Türleri (Return Types)
    • Try-Catch Kullanımı
  • Veri Yapıları

    • Koleksiyon Arayüzleri (Collection Interfaces)
    • LINQ Sorguları
  • İleri Konular

    • Dependency Injection Servisleri
    • DbContext - OnModelCreating Metodu
  • DbContext ve Entity Framework

    • Entity Framework Core - Fluent API ve İlişkiler Rehberi

LINQ Sorguları

LINQ Nedir?

Language Integrated Query (LINQ), .NET'te veri sorgulama için birleşik bir sözdizimi sağlar.

LINQ Sorgu Çeşitleri

1. Query Syntax (Sorgu Sözdizimi)

var result = from student in students
             where student.Age > 20
             select student.Name;

2. Method Syntax (Metot Sözdizimi)

var result = students
    .Where(s => s.Age > 20)
    .Select(s => s.Name);

LINQ Operatörleri

Filtreleme Operatörleri

Where

var adults = students.Where(s => s.Age >= 18);

OfType

var strings = objects.OfType<string>();

Distinct

var uniqueAges = students.Select(s => s.Age).Distinct();

Projeksiyon Operatörleri

Select

var names = students.Select(s => s.Name);

// Anonim tip
var studentInfo = students.Select(s => new { s.Name, s.Age });

SelectMany

var allCourses = students.SelectMany(s => s.Courses);

Sıralama Operatörleri

OrderBy

var sorted = students.OrderBy(s => s.Age);

OrderByDescending

var sorted = students.OrderByDescending(s => s.Age);

ThenBy

var sorted = students
    .OrderBy(s => s.Department)
    .ThenBy(s => s.Name);

Gruplama Operatörleri

GroupBy

var grouped = students.GroupBy(s => s.Department);

foreach (var group in grouped)
{
    Console.WriteLine($"Department: {group.Key}");
    foreach (var student in group)
    {
        Console.WriteLine(student.Name);
    }
}

Birleştirme Operatörleri

Join

var result = from student in students
             join course in courses on student.CourseId equals course.Id
             select new { student.Name, course.Title };

// Method Syntax
var result = students.Join(
    courses,
    s => s.CourseId,
    c => c.Id,
    (s, c) => new { s.Name, c.Title }
);

GroupJoin

var result = from department in departments
             join student in students on department.Id equals student.DepartmentId into studentGroup
             select new { department.Name, Students = studentGroup };

Küme Operatörleri

Union

var combined = list1.Union(list2);

Intersect

var common = list1.Intersect(list2);

Except

var difference = list1.Except(list2);

Toplama Operatörleri

Count

int count = students.Count();
int adultCount = students.Count(s => s.Age >= 18);

Sum

int totalAge = students.Sum(s => s.Age);

Average

double avgAge = students.Average(s => s.Age);

Min / Max

int minAge = students.Min(s => s.Age);
int maxAge = students.Max(s => s.Age);

Aggregate

string names = students.Aggregate("", (acc, s) => acc + s.Name + ", ");

Sayfalama Operatörleri

Skip

var skipped = students.Skip(10);

Take

var first10 = students.Take(10);

SkipWhile / TakeWhile

var result = students.SkipWhile(s => s.Age < 20);
var result = students.TakeWhile(s => s.Age < 25);

Kontrol Operatörleri

Any

bool hasAdults = students.Any(s => s.Age >= 18);

All

bool allAdults = students.All(s => s.Age >= 18);

Contains

bool contains = students.Contains(student);

Element Operatörleri

First / FirstOrDefault

var first = students.First();
var first = students.FirstOrDefault();
var first = students.First(s => s.Age > 20);

Last / LastOrDefault

var last = students.Last();
var last = students.LastOrDefault();

Single / SingleOrDefault

var single = students.Single(s => s.Id == 1);
var single = students.SingleOrDefault(s => s.Id == 1);

ElementAt

var element = students.ElementAt(5);

LINQ Lambda Kullanımı

Temel Lambda Sözdizimi

// (parametreler) => ifade
(x) => x * 2
(x, y) => x + y
() => DateTime.Now

Örnekler

Basit Filtreleme

var adults = students.Where(s => s.Age >= 18);

Karmaşık Koşullar

var result = students.Where(s => 
    s.Age >= 18 && 
    s.Department == "Engineering" && 
    s.GPA > 3.0
);

Null Kontrolleri

var result = students.Where(s => s.Address != null && s.Address.City == "Istanbul");

String Operasyonları

var result = students.Where(s => s.Name.StartsWith("A"));
var result = students.Where(s => s.Email.Contains("@gmail.com"));

Sayısal Operasyonlar

var result = students.Where(s => s.GPA > 3.5 && s.GPA <= 4.0);

Tarih Operasyonları

var result = students.Where(s => s.EnrollmentDate.Year == 2023);

Lambda ile Select

// Tek özellik
var names = students.Select(s => s.Name);

// Anonim tip
var info = students.Select(s => new { s.Name, s.Age });

// Hesaplanmış değer
var ages = students.Select(s => DateTime.Now.Year - s.BirthYear);

Lambda ile GroupBy

var grouped = students.GroupBy(s => s.Department);

var grouped = students
    .GroupBy(s => s.Department)
    .Select(g => new 
    { 
        Department = g.Key, 
        Count = g.Count(), 
        AvgAge = g.Average(s => s.Age) 
    });

Lambda ile OrderBy

var sorted = students.OrderBy(s => s.Age).ThenBy(s => s.Name);

Deferred Execution (Ertelenmiş Yürütme)

var query = students.Where(s => s.Age > 20); // Henüz çalışmaz
var result = query.ToList(); // Burada çalışır

Immediate Execution

var result = students.Where(s => s.Age > 20).ToList(); // Hemen çalışır

LINQ to SQL vs LINQ to Objects

// LINQ to Objects (Bellek içi)
var students = new List<Student>();
var result = students.Where(s => s.Age > 20).ToList();

// LINQ to SQL (Veritabanı)
var result = dbContext.Students.Where(s => s.Age > 20).ToList();
Last Updated:: 6/7/26, 12:33 PM
Contributors: yigitumretastan
Prev
Koleksiyon Arayüzleri (Collection Interfaces)