Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
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.
var Ogrenciler = OgrencileriGetir();

var OgrenciSoyadlari =
from Ogrenci in Ogrenciler
select Ogrenci.Soyadi;

Console.WriteLine("Öğrencilerin soyadları :");
foreach (var Soyad in OgrenciSoyadlari)
{
Console.WriteLine(Soyad);
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
1. Sınıftaki Başarılı öğrenciler...
Oran, Kenan
Erkanlı, Erhan
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
var Ogrenciler = OgrencileriGetir();

var OgrenciSoyadlari = Ogrenciler.Select(Ogrenci => Ogrenci.Soyadi);

Console.WriteLine("Öğrencilerin soyadları :");
foreach (var Soyad in OgrenciSoyadlari)
{
Console.WriteLine(Soyad);
}
Console.ReadLine();

Basit Select Kullanımı 2

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

int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var SayilarArtiBir = from Sayi in Sayilar
select Sayi + 1;

Console.WriteLine("Sayılar + 1:");

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

var SayilarArtiBir = Sayilar.Select(Sayi => Sayi + 1);

Console.WriteLine("Sayılar + 1:");

foreach (var i in SayilarArtiBir)
{
Console.WriteLine(i);
}
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.
var Ogrenciler = OgrencileriGetir();
List Kulupler = KulupleriGetir();

var OgrencilerVeKulupleri = from Ogrenci in Ogrenciler
select Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi;

Console.WriteLine("Öğrencilerin üye olduğu kulüpler :");
foreach (var Satir in OgrencilerVeKulupleri)
{
Console.WriteLine(Satir);
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
Öğrencilerin üye olduğu kulüpler :
Tuncay: Gezi
Jale: Tiyatro
Tekin: Tiyatro
Mesut: Tiyatro
Veli: Müzik
Ahmet: Müzik
Fatma: Tiyatro
Mehmet: Gezi
Hale: Tiyatro
Ayşe: Tiyatro
Cevdet: Müzik
Nuri: Müzik
Kenan: Gezi
Lale: Gezi
Erhan: Tiyatro
Erhan: Tiyatro
Erhan: Tiyatro
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
var Ogrenciler = OgrencileriGetir();
List Kulupler = KulupleriGetir();

var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi);

Console.WriteLine("Öğrencilerin üye olduğu kulüpler :");
foreach (var Satir in OgrencilerVeKulupleri)
{
Console.WriteLine(Satir);
}
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.
var Ogrenciler = OgrencileriGetir();

var BuyukHarfIsimler = from Ogrenci in Ogrenciler
select new { Ad = Ogrenci.Adi.ToUpper(),
Soyad = Ogrenci.Soyadi.ToUpper() };

Console.WriteLine("Büyük harflerle öğrenci isimleri :");
foreach (var BuyukHarfIsim in BuyukHarfIsimler)
{
Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad);
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır:
Büyük harflerle öğrenci isimleri :
TUNCAY ÇAĞRI
JALE İKİNCİ
TEKİN UĞURLU
MESUT BAHTİYAR
VELİ CANLI
AHMET GEÇE
FATMA TEYZE
MEHMET EMRE
HALE BİRİNCİ
AYŞE HANIM
CEVDET DÖĞER
NURİ BABAYİĞİT
KENAN ORAN
LALE ÜÇÜNCÜ
ERHAN ERKANLI
ERHAN FİDAN
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.
int[] Rakamlar = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

IEnumerable<int> KucukRakamlar = from Rakam in Rakamlar
where Rakam < 5
select Rakam;

Console.WriteLine("5'den küçük rakamlar...");

foreach (int Rakam in KucukRakamlar)
{
Console.WriteLine(Rakam);
}
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:
var Ogrenciler = OgrencileriGetir();

var BuyukHarfIsimler =
Ogrenciler.Select(Ogrenci => new { Ad = Ogrenci.Adi.ToUpper(),
Soyad = Ogrenci.Soyadi.ToUpper() });

Console.WriteLine("Büyük harflerle öğrenci isimleri :");

foreach (var BuyukHarfIsim in BuyukHarfIsimler)
{
Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad);
}
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.
var Ogrenciler = OgrencileriGetir();
List<KulupKaydi> Kulupler = KulupleriGetir();

var OgrencilerVeKulupleri =
Ogrenciler.Select(Ogrenci =>
new
{
Adi = Ogrenci.Adi,
Kulubu = Kulupler[Ogrenci.Kulup].Adi,
TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır"
});

Console.WriteLine("Öğrenciler ve kulüpleri:");

foreach (var Satir in OgrencilerVeKulupleri)
{
Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}",
Satir.Adi,
Satir.Kulubu,
Satir.TiyatroMu);
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
Öğrenciler ve kulüpleri:
Adı : Tuncay, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
Adı : Jale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Tekin, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Mesut, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Veli, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
Adı : Ahmet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
Adı : Fatma, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Mehmet, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
Adı : Hale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Ayşe, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Cevdet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
Adı : Nuri, Kulübü : Müzik, Tiyatro Kulübünde : Hayır
Adı : Kenan, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
Adı : Lale, Kulübü : Gezi, Tiyatro Kulübünde : Hayır
Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet
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:
var Ogrenciler = OgrencileriGetir();
List Kulupler = KulupleriGetir();

var OgrencilerVeKulupleri =
Ogrenciler.Select(Ogrenci =>
new
{
Adi = Ogrenci.Adi,
Kulubu = Kulupler[Ogrenci.Kulup].Adi,
TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır"
});

Console.WriteLine("Öğrenciler ve kulüpleri:");

foreach (var Satir in OgrencilerVeKulupleri)
{
Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}",
Satir.Adi,
Satir.Kulubu,
Satir.TiyatroMu);
}
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.
var Ogrenciler = OgrencileriGetir();

var OgrenciOzetBilgileri = from Ogrenci in Ogrenciler
select new
{
Ogrenci.Adi,
Ogrenci.Sinif,
BasariliMi = Ogrenci.Basarili
};

Console.WriteLine("Öğrenci başarı durumları :");

foreach (var OzetBilgi in OgrenciOzetBilgileri)
{
Console.WriteLine("{0}, {1}. sınıfta ve {2}.",
OzetBilgi.Adi,
OzetBilgi.Sinif,
OzetBilgi.BasariliMi ? "başarılı" : "başarısız");
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
Öğrenci başarı durumları :
Tuncay, 4. sınıfta ve başarılı.
Jale, 3. sınıfta ve başarılı.
Tekin, 1. sınıfta ve başarısız.
Mesut, 4. sınıfta ve başarısız.
Veli, 4. sınıfta ve başarısız.
Ahmet, 2. sınıfta ve başarılı.
Fatma, 3. sınıfta ve başarılı.
Mehmet, 4. sınıfta ve başarılı.
Hale, 2. sınıfta ve başarısız.
Ayşe, 2. sınıfta ve başarılı.
Cevdet, 3. sınıfta ve başarısız.
Nuri, 2. sınıfta ve başarılı.
Kenan, 1. sınıfta ve başarılı.
Lale, 3. sınıfta ve başarısız.
Erhan, 1. sınıfta ve başarılı.
Erhan, 2. sınıfta ve başarılı.
Erhan, 3. sınıfta ve başarılı.
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
var Ogrenciler = OgrencileriGetir();

var OgrenciOzetBilgileri =
Ogrenciler.Select(Ogrenci =>
new
{
Ogrenci.Adi,
Ogrenci.Sinif,
BasariliMi = Ogrenci.Basarili
});

Console.WriteLine("Öğrenci başarı durumları :");

foreach (var OzetBilgi in OgrenciOzetBilgileri)
{
Console.WriteLine("{0}, {1}. sınıfta ve {2}.",
OzetBilgi.Adi,
OzetBilgi.Sinif,
OzetBilgi.BasariliMi ? "başarılı" : "başarısız");
}
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.
var Ogrenciler = OgrencileriGetir();

var OgrenciListesi = Ogrenciler.Select((Ogrenci, Index) => new { Sirasi = Index + 1,
Ogrenci.No,
Ogrenci.Adi,
Ogrenci.Soyadi });

Console.WriteLine("Öğrenci listesi :");

foreach (var ListeSatiri in OgrenciListesi)
{
Console.WriteLine("{0}- {1} {2} {3}",
ListeSatiri.Sirasi,
ListeSatiri.No,
ListeSatiri.Adi,
ListeSatiri.Soyadi);

}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
Öğrenci listesi :
1- 2 Tuncay Çağrı
2- 4 Jale İkinci
3- 7 Tekin Uğurlu
4- 8 Mesut Bahtiyar
5- 12 Veli Canlı
6- 6 Ahmet Geçe
7- 15 Fatma Teyze
8- 14 Mehmet Emre
9- 3 Hale Birinci
10- 13 Ayşe Hanım
11- 11 Cevdet Döğer
12- 1 Nuri Babayiğit
13- 5 Kenan Oran
14- 9 Lale Üçüncü
15- 10 Erhan Erkanlı
16- 16 Erhan Fidan
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.
var Ogrenciler = OgrencileriGetir();

List Kulupler = KulupleriGetir();

var Sinif3Kulupleri = from Ogrenci in Ogrenciler
where Ogrenci.Sinif == 3
select new { Ogrenci.Adi, Kulup = Kulupler[Ogrenci.Kulup].Adi };

Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :");

foreach (var Satir in Sinif3Kulupleri)
{
Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup);
}
Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
3. sınıf öğrencilerinin üye olduğu kulüpler :
Jale, Tiyatro kulübüne üye.
Fatma, Tiyatro kulübüne üye.
Cevdet, Müzik kulübüne üye.
Lale, Gezi kulübüne üye.
Erhan, Tiyatro kulübüne üye.
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
var Ogrenciler = OgrencileriGetir();

List Kulupler = KulupleriGetir();

var Sinif3Kulupleri = Ogrenciler.Where(Ogrenci => Ogrenci.Sinif == 3)
.Select(Ogrenci =>
new {
Ogrenci.Adi,
Kulup = Kulupler[Ogrenci.Kulup].Adi
}
);

Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :");

foreach (var Satir in Sinif3Kulupleri)
{
Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup);
}
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ü