Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Bu siteyi Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.

0



LINQ - Yansıtma (Projection) - Select Kullanım Örnekleri

Bu makalede kullanılan veri kaynağını görmek için tıklayın.

Basit Select Kullanımı 1

LINQ sorgularında çoğunlukla bitiş olarak görülen SELECT cümleciği ile o anda sayılan eleman bildirilirse bu eleman seçilir. Ancak aşağıdaki örnekteki gibi oluşturulacak yeni listede kullanılmak üzere elemanın kendisi değil bir özelliği de seçilebilir ve yeni liste (örneğimizde OgrenciSoyadlari) bu değerlerden oluşur. İleride göreceğimiz gibi SELECT bazen çok farklı bir isimsiz sınıf oluşturup onu da seçebilir.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağından öğrencilerin soyadlarını seçer.
  1. var Ogrenciler = OgrencileriGetir();
  2. var OgrenciSoyadlari =
  3. from Ogrenci in Ogrenciler
  4. select Ogrenci.Soyadi;
  5. Console.WriteLine("Öğrencilerin soyadları :");
  6. foreach (var Soyad in OgrenciSoyadlari)
  7. {
  8. Console.WriteLine(Soyad);
  9. }
  10. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. 1. Sınıftaki Başarılı öğrenciler...
  2. Oran, Kenan
  3. Erkanlı, Erhan
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. var Ogrenciler = OgrencileriGetir();
  2. var OgrenciSoyadlari = Ogrenciler.Select(Ogrenci => Ogrenci.Soyadi);
  3. Console.WriteLine("Öğrencilerin soyadları :");
  4. foreach (var Soyad in OgrenciSoyadlari)
  5. {
  6. Console.WriteLine(Soyad);
  7. }
  8. Console.ReadLine();

Basit Select Kullanımı 2

Bu örnek, bir tamsayılar dizisindeki elemanların 1 fazlalarını seçer.

  1. int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
  2. var SayilarArtiBir = from Sayi in Sayilar
  3. select Sayi + 1;
  4. Console.WriteLine("Sayılar + 1:");
  5. foreach (var i in SayilarArtiBir)
  6. {
  7. Console.WriteLine(i);
  8. }
  9. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. Sayılar + 1:
  2. 6
  3. 5
  4. 2
  5. 4
  6. 10
  7. 9
  8. 7
  9. 8
  10. 3
  11. 1
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
  2. var SayilarArtiBir = Sayilar.Select(Sayi => Sayi + 1);
  3. Console.WriteLine("Sayılar + 1:");
  4. foreach (var i in SayilarArtiBir)
  5. {
  6. Console.WriteLine(i);
  7. }
  8. Console.ReadLine();

Select Dönüştürme (Transformation)

Bu örnek öğrenci bilgilerini içeren bir veri kaynağından ve öğrenci kuluplerinin bilgilerini içeren ikinci bir veri kaynağından öğrencilerin adlarını ve kulüplerin adlarını seçerek öğrencilerin adları ve üye oldukları kulüplerin adlarından yeni bir liste oluşturur. Öğrenciler veri kaynağındaki kayıtlarda öğrenci kulüpleri, kulüp veri kaynağındaki kulübün sıra numarası ve aynı zamanda kayıt numarası olan bir numara ile belirlenmiştir.
  1. var Ogrenciler = OgrencileriGetir();
  2. List Kulupler = KulupleriGetir();
  3. var OgrencilerVeKulupleri = from Ogrenci in Ogrenciler
  4. select Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi;
  5. Console.WriteLine("Öğrencilerin üye olduğu kulüpler :");
  6. foreach (var Satir in OgrencilerVeKulupleri)
  7. {
  8. Console.WriteLine(Satir);
  9. }
  10. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. Öğrencilerin üye olduğu kulüpler :
  2. Tuncay: Gezi
  3. Jale: Tiyatro
  4. Tekin: Tiyatro
  5. Mesut: Tiyatro
  6. Veli: Müzik
  7. Ahmet: Müzik
  8. Fatma: Tiyatro
  9. Mehmet: Gezi
  10. Hale: Tiyatro
  11. Ayşe: Tiyatro
  12. Cevdet: Müzik
  13. Nuri: Müzik
  14. Kenan: Gezi
  15. Lale: Gezi
  16. Erhan: Tiyatro
  17. Erhan: Tiyatro
  18. Erhan: Tiyatro
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. var Ogrenciler = OgrencileriGetir();
  2. List Kulupler = KulupleriGetir();
  3. var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi);
  4. Console.WriteLine("Öğrencilerin üye olduğu kulüpler :");
  5. foreach (var Satir in OgrencilerVeKulupleri)
  6. {
  7. Console.WriteLine(Satir);
  8. }
  9. Console.ReadLine();

Select ve isimsiz Tip (Anonymous Types) Kullanımı 1

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci ad ve soyadlarından yeni bir isimsiz tip oluşturarak seçer.
  1. var Ogrenciler = OgrencileriGetir();
  2. var BuyukHarfIsimler = from Ogrenci in Ogrenciler
  3. select new { Ad = Ogrenci.Adi.ToUpper(),
  4. Soyad = Ogrenci.Soyadi.ToUpper() };
  5. Console.WriteLine("Büyük harflerle öğrenci isimleri :");
  6. foreach (var BuyukHarfIsim in BuyukHarfIsimler)
  7. {
  8. Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad);
  9. }
  10. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır:
  1. Büyük harflerle öğrenci isimleri :
  2. TUNCAY ÇAĞRI
  3. JALE İKİNCİ
  4. TEKİN UĞURLU
  5. MESUT BAHTİYAR
  6. VELİ CANLI
  7. AHMET GEÇE
  8. FATMA TEYZE
  9. MEHMET EMRE
  10. HALE BİRİNCİ
  11. AYŞE HANIM
  12. CEVDET DÖĞER
  13. NURİ BABAYİĞİT
  14. KENAN ORAN
  15. LALE ÜÇÜNCÜ
  16. ERHAN ERKANLI
  17. ERHAN FİDAN
  18. ERHAN ÇELİK
Daha önceki örneklerimizde görüldüğü gibi, foreach döngüsü içinde döngü sırasında seçilecek elemanın tipini bildirmek için var kulandık. Var ifadesi kolaylık olsun diye, elemanın tipi ile uğraşmamak için kullanıldı. Var ile tanımlamak yerine elemanın tipi de verilebilirdi. Örneğin Basit Where Örneği 1'de kullandığımız örneği (özellikle foreach bölümününe dikkat edin) var ifadelerini çıkarıp aşağıdaki gibi de yazabilirdik.
  1. int[] Rakamlar = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  2. IEnumerable<int> KucukRakamlar = from Rakam in Rakamlar
  3. where Rakam < 5
  4. select Rakam;
  5. Console.WriteLine("5'den küçük rakamlar...");
  6. foreach (int Rakam in KucukRakamlar)
  7. {
  8. Console.WriteLine(Rakam);
  9. }
  10. Console.ReadLine();
Anonim tiplerde ise tipin bir adı olmadığından mecburen var kullanırız. Anonim tiplerin isimleri derleme zamanında derleyici tarafından belirlenir.

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. var Ogrenciler = OgrencileriGetir();
  2. var BuyukHarfIsimler =
  3. Ogrenciler.Select(Ogrenci => new { Ad = Ogrenci.Adi.ToUpper(),
  4. Soyad = Ogrenci.Soyadi.ToUpper() });
  5. Console.WriteLine("Büyük harflerle öğrenci isimleri :");
  6. foreach (var BuyukHarfIsim in BuyukHarfIsimler)
  7. {
  8. Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad);
  9. }
  10. Console.ReadLine();

Select ve isimsiz Tip (Anonymous Types) Kullanımı 2

Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından öğrenci adları ve üye oldukları kulüplerin adlarını kullanarak daha önceki örnekten bir parça daha karmaşık bir isimsiz tip oluşturarak seçer.
  1. var Ogrenciler = OgrencileriGetir();
  2. List<KulupKaydi> Kulupler = KulupleriGetir();
  3. var OgrencilerVeKulupleri =
  4. Ogrenciler.Select(Ogrenci =>
  5. new
  6. {
  7. Adi = Ogrenci.Adi,
  8. Kulubu = Kulupler[Ogrenci.Kulup].Adi,
  9. TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır"
  10. });
  11. Console.WriteLine("Öğrenciler ve kulüpleri:");
  12. foreach (var Satir in OgrencilerVeKulupleri)
  13. {
  14. Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}",
  15. Satir.Adi,
  16. Satir.Kulubu,
  17. Satir.TiyatroMu);
  18. }
  19. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. Öğrenciler ve kulüpleri:
  2. Adı : Tuncay, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
  3. Adı : Jale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  4. Adı : Tekin, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  5. Adı : Mesut, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  6. Adı : Veli, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
  7. Adı : Ahmet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
  8. Adı : Fatma, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  9. Adı : Mehmet, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
  10. Adı : Hale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  11. Adı : Ayşe, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  12. Adı : Cevdet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
  13. Adı : Nuri, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
  14. Adı : Kenan, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
  15. Adı : Lale, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
  16. Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  17. Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
  18. Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. var Ogrenciler = OgrencileriGetir();
  2. List Kulupler = KulupleriGetir();
  3. var OgrencilerVeKulupleri =
  4. Ogrenciler.Select(Ogrenci =>
  5. new
  6. {
  7. Adi = Ogrenci.Adi,
  8. Kulubu = Kulupler[Ogrenci.Kulup].Adi,
  9. TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır"
  10. });
  11. Console.WriteLine("Öğrenciler ve kulüpleri:");
  12. foreach (var Satir in OgrencilerVeKulupleri)
  13. {
  14. Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}",
  15. Satir.Adi,
  16. Satir.Kulubu,
  17. Satir.TiyatroMu);
  18. }
  19. Console.ReadLine();

Select ve İsimsiz Tip (Anonymous Types) Kullanımı 3

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci kayıtlarından öğrenci adı, sınıfı ve başarı durumunu özelliklerinden yeni bir isimsiz tip oluşturur ve seçer. Daha sonra bir foreach döngüsü ile çıktıya yazar.
  1. var Ogrenciler = OgrencileriGetir();
  2. var OgrenciOzetBilgileri = from Ogrenci in Ogrenciler
  3. select new
  4. {
  5. Ogrenci.Adi,
  6. Ogrenci.Sinif,
  7. BasariliMi = Ogrenci.Basarili
  8. };
  9. Console.WriteLine("Öğrenci başarı durumları :");
  10. foreach (var OzetBilgi in OgrenciOzetBilgileri)
  11. {
  12. Console.WriteLine("{0}, {1}. sınıfta ve {2}.",
  13. OzetBilgi.Adi,
  14. OzetBilgi.Sinif,
  15. OzetBilgi.BasariliMi ? "başarılı" : "başarısız");
  16. }
  17. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. Öğrenci başarı durumları :
  2. Tuncay, 4. sınıfta ve başarılı.
  3. Jale, 3. sınıfta ve başarılı.
  4. Tekin, 1. sınıfta ve başarısız.
  5. Mesut, 4. sınıfta ve başarısız.
  6. Veli, 4. sınıfta ve başarısız.
  7. Ahmet, 2. sınıfta ve başarılı.
  8. Fatma, 3. sınıfta ve başarılı.
  9. Mehmet, 4. sınıfta ve başarılı.
  10. Hale, 2. sınıfta ve başarısız.
  11. Ayşe, 2. sınıfta ve başarılı.
  12. Cevdet, 3. sınıfta ve başarısız.
  13. Nuri, 2. sınıfta ve başarılı.
  14. Kenan, 1. sınıfta ve başarılı.
  15. Lale, 3. sınıfta ve başarısız.
  16. Erhan, 1. sınıfta ve başarılı.
  17. Erhan, 2. sınıfta ve başarılı.
  18. Erhan, 3. sınıfta ve başarılı.
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. var Ogrenciler = OgrencileriGetir();
  2. var OgrenciOzetBilgileri =
  3. Ogrenciler.Select(Ogrenci =>
  4. new
  5. {
  6. Ogrenci.Adi,
  7. Ogrenci.Sinif,
  8. BasariliMi = Ogrenci.Basarili
  9. });
  10. Console.WriteLine("Öğrenci başarı durumları :");
  11. foreach (var OzetBilgi in OgrenciOzetBilgileri)
  12. {
  13. Console.WriteLine("{0}, {1}. sınıfta ve {2}.",
  14. OzetBilgi.Adi,
  15. OzetBilgi.Sinif,
  16. OzetBilgi.BasariliMi ? "başarılı" : "başarısız");
  17. }
  18. Console.ReadLine();

Dizinli / indeksli (Indexed) Select Kullanımı

Select yönteminin 2. kullanım şeklinde, yöntem o anda bulunduğu eleman ile elemanın 0 tabanlı sıra numarasını (index) Lambda İfadesi olarak yazılabilecek bir isimsiz fonksiyona gönderir. Bu isimsiz fonksiyonda elemanın kensini ve sıra numarası ile ilgili işlemleri yaparız.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci kayıtlarından öğrencinin listedeki sırası, numarası, adı ve soyadı verilerinden yeni bir isimsiz tip oluşturur ve seçer. Daha sonra bir foreach döngüsü ile çıktıya yazar.
  1. var Ogrenciler = OgrencileriGetir();
  2. var OgrenciListesi = Ogrenciler.Select((Ogrenci, Index) => new { Sirasi = Index + 1,
  3. Ogrenci.No,
  4. Ogrenci.Adi,
  5. Ogrenci.Soyadi });
  6. Console.WriteLine("Öğrenci listesi :");
  7. foreach (var ListeSatiri in OgrenciListesi)
  8. {
  9. Console.WriteLine("{0}- {1} {2} {3}",
  10. ListeSatiri.Sirasi,
  11. ListeSatiri.No,
  12. ListeSatiri.Adi,
  13. ListeSatiri.Soyadi);
  14. }
  15. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. Öğrenci listesi :
  2. 1- 2 Tuncay Çağrı
  3. 2- 4 Jale İkinci
  4. 3- 7 Tekin Uğurlu
  5. 4- 8 Mesut Bahtiyar
  6. 5- 12 Veli Canlı
  7. 6- 6 Ahmet Geçe
  8. 7- 15 Fatma Teyze
  9. 8- 14 Mehmet Emre
  10. 9- 3 Hale Birinci
  11. 10- 13 Ayşe Hanım
  12. 11- 11 Cevdet Döğer
  13. 12- 1 Nuri Babayiğit
  14. 13- 5 Kenan Oran
  15. 14- 9 Lale Üçüncü
  16. 15- 10 Erhan Erkanlı
  17. 16- 16 Erhan Fidan
  18. 17- 17 Erhan Çelik
Dizinli SELECT yöntemi Func<T1, T2, TResult>(T1 arg1, T2 arg2)  delegesi ile temsil edilen ve Lambda İfadesi şeklinde yazdığımız bir isimsiz fonksiyon kullanır. Bu isimsiz fonksiyona 2 parametre geçer. 1. parametre o anda sayılan elemanın kendisi, 2. parametre olarak da elemanın sırası 0 tabanlı olarak (ilk elemanın numarası 0) döndürülür. Biz de elemanın kendisini ve sırasını kullanarak isimsiz fonksiyon içinde işlemler gerçekleştirebiliriz.

Şimdiye kadarki örneklerimizde SELECT yöntemine Func<T1, TResult>(T1 arg1) ile temsil edilen, tek parametreli bir lambda ifadesi, örneğin Ogrenci => Ogrenci.Basarili kullanmıştık.

Select Filtre Kullanımı (Select Filtered)

Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından WHERE cümleciği ile filtre uygulayarak 3. sınıf öğrencilerinin adları ve bu öğrencilerin çalıştıkları kulüp bilgisinden bir isimsiz tip oluşturarak seçer ve bir foreach döngüsü ile çıktıya yazar.
  1. var Ogrenciler = OgrencileriGetir();
  2. List Kulupler = KulupleriGetir();
  3. var Sinif3Kulupleri = from Ogrenci in Ogrenciler
  4. where Ogrenci.Sinif == 3
  5. select new { Ogrenci.Adi, Kulup = Kulupler[Ogrenci.Kulup].Adi };
  6. Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :");
  7. foreach (var Satir in Sinif3Kulupleri)
  8. {
  9. Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup);
  10. }
  11. Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
  1. 3. sınıf öğrencilerinin üye olduğu kulüpler :
  2. Jale, Tiyatro kulübüne üye.
  3. Fatma, Tiyatro kulübüne üye.
  4. Cevdet, Müzik kulübüne üye.
  5. Lale, Gezi kulübüne üye.
  6. Erhan, Tiyatro kulübüne üye.
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
  1. var Ogrenciler = OgrencileriGetir();
  2. List Kulupler = KulupleriGetir();
  3. var Sinif3Kulupleri = Ogrenciler.Where(Ogrenci => Ogrenci.Sinif == 3)
  4. .Select(Ogrenci =>
  5. new {
  6. Ogrenci.Adi,
  7. Kulup = Kulupler[Ogrenci.Kulup].Adi
  8. }
  9. );
  10. Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :");
  11. foreach (var Satir in Sinif3Kulupleri)
  12. {
  13. Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup);
  14. }
  15. Console.ReadLine();

Kaynak:
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b



Diğer LINQ Makaleleri:


Yazan: 10.04.16 17:17

101,387p 4ü