0Pricing
C# Academy · Ders

Where ve Filtreleme

Eşleşen öğeleri seçin.

Where ve Filtreleme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Where Ne Yapar

Where, temel LINQ filtreleme işlecidir. Bir koşul alır — bool döndüren bir işlev — ve yalnızca bu koşulu karşılayan öğeleri üretir.

System.Linq içinde yer alır ve tüm IEnumerable<T> türleriyle çalışır; kaynakta değişiklik yapmak yerine yeni bir dizi döndürür.

using System;
using System.Linq;
using System.Collections.Generic;

var nums = new List<int> { 1, 2, 3, 4, 5, 6 };
var evens = nums.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens));

Koşul Lambda İfadesi

Where'a geçirilen bağımsız değişken bir lambda ifadesidir: n => condition. Parametre her öğeyi temsil eder ve gövdenin true veya false olarak değerlendirilmesi gerekir.

true döndürmek öğeyi korur, false döndürmek ise öğeyi eler. Her boole ifadesi kullanılabilir.

using System;
using System.Linq;

string[] words = { "apple", "fig", "banana", "kiwi" };
var shortWords = words.Where(w => w.Length <= 4);
Console.WriteLine(string.Join(", ", shortWords));

Sorgu Sözdizimi Biçimi

LINQ, SQL'i andıran bir sorgu sözdizimi sunar. where yan tümcesi filtreleme yapar, select ise yansıtma gerçekleştirir.

Bu sözdizimi aynı yöntem çağrılarına derlenir; dolayısıyla from x in src where ... select x ile src.Where(...) aynı anlama gelir. Hangisi daha okunaklıysa onu kullanın.

using System;
using System.Linq;

int[] scores = { 40, 75, 90, 55, 88 };
var passing = from s in scores
              where s >= 60
              select s;
Console.WriteLine(string.Join(", ", passing));

Koşulları Birleştirme

Tek bir koşul içinde birden çok denetimi && ve || ile birleştirebilirsiniz. Bu, ilgili filtrelemeleri tek geçişte tutar.

İşleçleri karıştırırken, diğer tüm boole ifadelerinde olduğu gibi okunabilirliği artırmak için parantez kullanın.

using System;
using System.Linq;
using System.Collections.Generic;

var ages = new List<int> { 12, 17, 21, 35, 64, 70 };
var adults = ages.Where(a => a >= 18 && a < 65);
Console.WriteLine(string.Join(", ", adults));

Where Çağrılarını Zincirleme

Birden çok Where çağrısını zincirleyebilirsiniz. Her çağrı bir öncekinin sonucunu filtreler; bu nedenle koşullar mantıksal AND ile birleştirilir.

Zincirleme, tek ve büyük bir koşuldan bazen daha okunaklıdır ve farklı yerlerde oluşturulan filtreleri birleştirmenize olanak tanır.

using System;
using System.Linq;

int[] data = { 3, 8, 15, 22, 27, 40 };
var result = data.Where(n => n > 5)
                 .Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", result));

Where ile Dizin Kullanımı

Where işlecinin bir aşırı yüklemesi, öğenin sıfır tabanlı dizinini ikinci lambda parametresi olarak sunar. Bu, konuma dayalı filtreleme için kullanışlıdır.

Örneğin her iki öğeden birini korumak veya dizine göre ilk öğeyi atlamak için bunu kullanabilirsiniz.

using System;
using System.Linq;

string[] items = { "a", "b", "c", "d", "e" };
var evenIdx = items.Where((val, idx) => idx % 2 == 0);
Console.WriteLine(string.Join(", ", evenIdx));

Nesneleri Filtreleme

Filtreleme, nesne koleksiyonlarında özellikle etkilidir. Koşul, her öğenin herhangi bir özelliğini okuyabilir.

"Bu şehirdeki müşteriler" veya "belirli bir eşiğin üzerindeki siparişler" gibi iş kurallarını bildirerek ifade etmenin yolu budur.

using System;
using System.Linq;
using System.Collections.Generic;

record Product(string Name, decimal Price);
var list = new List<Product> {
  new("Pen", 1.5m), new("Lamp", 20m), new("Mug", 8m) };
var cheap = list.Where(p => p.Price < 10);
foreach (var p in cheap) Console.WriteLine(p.Name);

Ertelenmiş Yürütme

Where ertelenmiş yürütme kullanır: tanımlandığı anda çalışmaz, yalnızca dizi üzerinde yinelendiğinde (örneğin bir foreach içinde veya ToList çağrısıyla) çalışır.

Bu, üzerinde yinelenmeden önce kaynakta yapılan değişikliklerin sonuca yansıyacağı anlamına gelir.

using System;
using System.Linq;
using System.Collections.Generic;

var src = new List<int> { 1, 2 };
var q = src.Where(n => n > 1);
src.Add(5);
Console.WriteLine(string.Join(", ", q));

Yeniden Değerlendirme Maliyeti

Filtreleme ertelendiği için aynı sorgu üzerinde iki kez yinelenmek, koşulu iki kez çalıştırır. Pahalı koşullarda veya canlı kaynaklarda bu durum sizi şaşırtabilir.

Kararlı ve yeniden kullanılabilir bir anlık görüntüye ihtiyaç duyduğunuzda, bu kursta ileride ele alınacak ToList ile sonucu bir kez somutlaştırın.

using System;
using System.Linq;

int calls = 0;
int[] nums = { 1, 2, 3 };
var q = nums.Where(n => { calls++; return n > 1; });
foreach (var _ in q) { }
foreach (var _ in q) { }
Console.WriteLine(calls);

Önce Filtrele, Sonra Say

Yaygın bir yaklaşım, filtreleme yaptıktan sonra kaç öğenin eşleştiğini sormaktır. Count, doğrudan bir koşul alarak filtreleme ile sayma işlemlerini birleştirebilir.

count.Count(p => cond), seq.Where(p => cond).Count() ile eşdeğerdir; ancak daha kısa okunur.

using System;
using System.Linq;

int[] grades = { 55, 80, 42, 91, 67 };
int passed = grades.Count(g => g >= 60);
Console.WriteLine($"Passed: {passed}");

Boş Sonuçlar Sorun Değildir

Hiçbir öğe koşulu karşılamazsa Where yalnızca boş bir dizi üretir; hiçbir zaman null üretmez.

Bu, filtrelerin güvenle zincirlenmesini sağlar: boş bir sonuç, özel bir işlem gerektirmeden sonraki işleçlerden geçer.

using System;
using System.Linq;

int[] nums = { 1, 2, 3 };
var big = nums.Where(n => n > 100);
Console.WriteLine($"Count: {big.Count()}");

Hızlı Kontrol

Ertelenmiş yürütmeyi ne kadar anladığınızı test edin.

Özet

Where, bir diziyi boole koşuluna göre filtreler ve yeni bir IEnumerable döndürür. Dizin kullanan bir aşırı yüklemesi vardır; çağrılar zincirlenebilir veya &&/|| ile birleştirilebilir ve nesneler üzerinde özellikleri aracılığıyla çalışır.

En önemlisi, işlem ertelenir; yürütme sırasında çalışır ve yeniden yinelendiğinde yeniden değerlendirilir. Sırada, koruduğumuz öğeleri Select ile biçimlendireceğiz.

Sıkça Sorulan Sorular

“Where ve Filtreleme” dersi ücretsiz mi?

Evet — “Where ve Filtreleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Where ve Filtreleme” dersinde ne öğreneceğim?

Eşleşen öğeleri seçin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Where ve Filtreleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Where ve Filtreleme
  2. SELECT ve Projeksiyon
  3. OrderBy ve Gruplama
  4. Toplu İşlemler ve ToList
← C# Academy Sayfasına Dön