LINQ’daki filtreleme operatörleri, verilen bazı kriterlere göre diziyi (koleksiyonu) filtreler.
Aşağıdaki tablo, LINQ’da bulunan tüm filtreleme operatörlerini listelenmektedir.
| Filtreleme Operatörü | Tanımı |
|---|---|
| Where | Bir yüklem işlevine dayalı olarak koleksiyondan değerleri döndürür. |
| OfType | Belirtilen türe göre koleksiyondan değerleri döndürür. Ancak, belirli bir türe yayın yapma yeteneklerine bağlı olacaktır. |
Where
Where operatörü (Linq uzantı yöntemi), koleksiyonu belirli bir ölçüt ifadesine göre filtreler ve yeni bir koleksiyon döndürür. Kriterler lambda ifadesi veya Func temsilci tipi olarak belirtilebilir.
Where extension yöntemi aşağıdaki iki aşırı yüklemeye sahiptir. Her iki aşırı yükleme yöntemi de bir Func temsilci türü parametresini kabul eder. Bir aşırı yük gerekli Func giriş parametresi ve ikinci aşırı yük yöntemi gerekli Func giriş parametresi burada int dizin içindir:
1 2 3 4 5 6 7 | public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate); |
Sorgu Sözdiziminde Where yan tümcesi
Aşağıdaki sorgu örneği, verilen koleksiyondan (sıradan) genç olan öğrencileri filtrelemek için bir Where operatörü kullanır. Yüklem işlevi olarak bir lambda ifadesi kullanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | class Ogrenci { public int ID; public string Ad; public int Yas; } class Program { static void Main(string[] args) { IList<Ogrenci> ogrenciListe = new List<Ogrenci>() { new Ogrenci() { ID = 1, Ad = "Hayri", Yas = 13} , new Ogrenci() { ID = 2, Ad = "Ahmet", Yas = 21 } , new Ogrenci() { ID = 3, Ad = "Hüseyin", Yas = 18 } , new Ogrenci() { ID = 4, Ad = "Recep" , Yas = 20} , new Ogrenci() { ID = 5, Ad = "Ufuk" , Yas = 15 } }; var filtreliListe = from s in ogrenciListe where s.Yas > 12 && s.Yas < 20 select s.Ad; foreach (var ad in filtreliListe) { Console.WriteLine( ad ); } Console.ReadKey(); } } |
Yukarıdaki örnekte çalıştırıldığında aşağıdaki öğrenciler listelenecektir.
1 2 3 4 5 | Hayri Hüseyin Ufuk |
Yukarıdaki örnek sorguda, lambda ifade gövdesi s.Yas> 12 && s.Yas<20, koleksiyondaki her öğrenciyi değerlendiren bir yüklem işlevi Func olarak geçirilir.
Alternatif olarak, aşağıdaki gibi bir yüklem işlevi olarak geçmek için anonim bir yöntemle Func türü bir temsilci de kullanabilirsiniz (çıktı aynı olacaktır):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | class Ogrenci { public int ID; public string Ad; public int Yas; } class Program { static void Main(string[] args) { IList<Ogrenci> ogrenciListe = new List<Ogrenci>() { new Ogrenci() { ID = 1, Ad = "Hayri", Yas = 13} , new Ogrenci() { ID = 2, Ad = "Ahmet", Yas = 21 } , new Ogrenci() { ID = 3, Ad = "Hüseyin", Yas = 18 } , new Ogrenci() { ID = 4, Ad = "Recep" , Yas = 20} , new Ogrenci() { ID = 5, Ad = "Ufuk" , Yas = 15 } }; Func<Ogrenci, bool> gencMi = delegate (Ogrenci s) { return s.Yas > 12 && s.Yas < 20; }; var filtreliListe = from s in ogrenciListe where gencMi(s) select s.Ad; foreach (var ad in filtreliListe) { Console.WriteLine( ad ); } Console.ReadKey(); } } |
Where extension methodu Sözdizimi
Sorgu söz diziminden farklı olarak, LINQ yöntemi sözdiziminde yalnızca gövde ifadesi yerine tüm lambda ifadesini yüklem işlevi olarak geçirmeniz gerekir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | class Ogrenci { public int ID; public string Ad; public int Yas; } class Program { static void Main(string[] args) { IList<Ogrenci> ogrenciListe = new List<Ogrenci>() { new Ogrenci() { ID = 1, Ad = "Hayri", Yas = 13} , new Ogrenci() { ID = 2, Ad = "Ahmet", Yas = 21 } , new Ogrenci() { ID = 3, Ad = "Hüseyin", Yas = 18 } , new Ogrenci() { ID = 4, Ad = "Recep" , Yas = 20} , new Ogrenci() { ID = 5, Ad = "Ufuk" , Yas = 15 } }; var filtreliListe = ogrenciListe.Where(s => s.Yas > 12 && s.Yas < 20); foreach (var ogrenci in filtreliListe) { Console.WriteLine( ogrenci.Ad ); } Console.ReadKey(); } } |
Yukarıda bahsedildiği gibi, Where extension yöntemi ayrıca koleksiyondaki mevcut öğenin indeksini içeren ikinci bir aşırı yüke sahiptir. Gerekirse bu dizini mantığınızda kullanabilirsiniz.
Aşağıdaki örnek, koleksiyondaki tek öğeleri filtrelemek ve yalnızca çift öğeleri döndürmek için Where yan tümcesini kullanır. Lütfen dizinin sıfırdan başladığını unutmayın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Ogrenci { public int ID; public string Ad; public int Yas; } class Program { static void Main(string[] args) { IList<Ogrenci> ogrenciListe = new List<Ogrenci>() { new Ogrenci() { ID = 1, Ad = "Hayri", Yas = 13} , new Ogrenci() { ID = 2, Ad = "Ahmet", Yas = 21 } , new Ogrenci() { ID = 3, Ad = "Hüseyin", Yas = 18 } , new Ogrenci() { ID = 4, Ad = "Recep" , Yas = 20} , new Ogrenci() { ID = 5, Ad = "Ufuk" , Yas = 15 } }; var filtreliListe = ogrenciListe.Where((s, i) => { if (i % 2 == 0) // çift indexleri alacak return true; return false; }); foreach (var ogrenci in filtreliListe) { Console.WriteLine( ogrenci.Ad ); } Console.ReadKey(); } } |
Çoklu Where yan tümcesi
Tek bir LINQ sorgusunda Where() extension yöntemini birden fazla kez çağırabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class Ogrenci { public int ID; public string Ad; public int Yas; } class Program { static void Main(string[] args) { IList<Ogrenci> ogrenciListe = new List<Ogrenci>() { new Ogrenci() { ID = 1, Ad = "Hayri", Yas = 13} , new Ogrenci() { ID = 2, Ad = "Ahmet", Yas = 21 } , new Ogrenci() { ID = 3, Ad = "Hüseyin", Yas = 18 } , new Ogrenci() { ID = 4, Ad = "Recep" , Yas = 20} , new Ogrenci() { ID = 5, Ad = "Ufuk" , Yas = 15 } }; var filtreliListe = from s in ogrenciListe where s.Yas > 12 where s.Yas < 20 select s; foreach (var ogrenci in filtreliListe) { Console.WriteLine( ogrenci.Ad ); } Console.ReadKey(); } } |











Yorum Yap