"Enter"a basıp içeriğe geçin

LINQ ile filtreleme

List<string> items = new List<string>() { "berkay", "yaylaci", "test1", "blog", "firstpost", "blabla" };

Elimizde stringlerden oluşan bir liste var, içinde sadece “ay” geçenleri almak istiyorum, (hepsinin sonucu aynı olacak). LINQ dışında uygulayabileceğimiz çözüm; for,while döngüsü,

string singleLineResult = "";
for(int i = 0; i < items.Count; i++)
{
   string tempItem = items[i];
   if(tempItem.Contains("ay")) // bütün elemanları teker teker dolaştık ve içinde "ay" var mı diye kontrol ettik
   {
      singleLineResult += tempItem + " ";
   }
}
Console.WriteLine(singleLineResult);

Şimdi LINQ ile aynı işlemi gerçekleştirelim, .Where() metodu ilk parametre olarak bir kaynak ve ikinci parametre olarak bir kriter ister. Lambda gösterim ile yazdığımız bu satırda, X (siz isterseniz başka isim verebilirsiniz ben x dedim); Listenin içinde bulunan stringlere denk gelecektir(aynı for döngüsünde döndüğümüz gibi, yani itteration), ve ikinci parameterde verdiğimiz Contains("ay") , elimizde bulunan stringe “içinde “ay” geçiyor mu?” sorusunu sorar,

Eğer içerisinde istediğimiz kriter varsa kaynak stringi IEnumerable() bir listeye dahil eder. Geri dönüş tipinin ne olduğunu biliyorsak eğer, result‘ı var olarak tanımlamak yerine direkt List<string> olarak tanımlayabiliriz.

var result = items.Where(x => x.Contains("ay")).ToList();

En sonunda elimizde liste halinde bulunan result değişkenini console’da göstermek kaldı,

var singleLineResult = string.Join(" ", result);

string.Join() ‘in ilk parametresine, listenin elemanlarını hangi karakter ile ayıracağımı söyledim, (boşluk ile), ve kaynak listeyi verdim. Ve tek satıra çevirdiğim stringlerimi ekranda gösterdim;

Console.WriteLine(singleLineResult);