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 - Temel İşlemler - Birleştirme (Joining)

Birleştirme, 2 farklı listedeki değerlerin ortak bir değere göre birleştirip tek bir liste oluşturma işidir. Bunun için join cümleciği kullanılır. LINQ'daki join doğrudan tablolardan değil, nesne koleksiyonları üzerinde çalışır.

Aşağıdaki örnek aynı şehirdeki müşteriler ve dağıtıcıların bir listesini verir.
var birlestirilmisListe =
from Musteri in Musteriler
join Dagitici in Dagiticilar on Musteri.Sehir equals Dagitici.Sehir
select new { MusteriAdi = Musteri.Adi, DagiticiAdi = Dagitici.Adi };
Örnekteki ifadeleri tek tek açıklayalım.

from Musteri in Musteriler

ifadesi musteriler isimli listeden seçim yapılacağını ve seçilene "musteri" isminin verilmesini,

join Dagitici in Dagiticilar

ifadesi ikinci olarak dagiticilar isimli listeden ayrıca seçim yapılacağını ve seçilene "dagitici" isminin verilmesini,

on

ifadesi iki listenin birleştirilme bilgisinin ne üzerinden yapılacağının kendisinden sonra bildirildiğini,

Musteri.Sehir equals Dagitici.Sehir

ifadesi, listelerde şehir bilgisi aynı olan (equals = eşittir) müşteriler ile dağıtıcıların seçilmesini,

select new { MusteriAdi = Musteri.Adi, DagiticiAdi = Dagitici.Adi };

ifadesi, seçilenlerin yeni bir isimsiz (anonim) nesne oluşturularak bu nesnede tek bir bilgi satırı haline dönüştürülmesini ve nesnenin MusteriAdi özelliği olarak müşterilerin adının, DagiticiAdi özelliği olarak dağıtıcının adının kullanılmasını bildirir.

Örneğin tamamı ve çıktısı şöyle.
namespace LinQJoin1
{
class Program
{
public class Musteri
{
public string Adi { get; set; }
public string Soyadi { get; set; }
public string Sehir { get; set; }
}

public static List<Musteri> MusterileriGetir()
{
List<Musteri> Musteriler = new List<Musteri>
{
new Musteri {Adi="Kenan", Soyadi="Oran", Sehir="Muğla"},
new Musteri {Adi="Erhan", Soyadi="Erkanlı", Sehir="Ankara"},
new Musteri {Adi="Ercan", Soyadi="Orak", Sehir="Ankara"},
new Musteri {Adi="Yaşar", Soyadi="Yılmaz", Sehir="Manisa"}
};
return Musteriler;
}

public class Dagitici
{
public string Adi { get; set; }
public string Soyadi { get; set; }
public string Sehir { get; set; }
}

public static List<Dagitici> DagiticilariGetir()
{
List<Dagitici> Dagiticilar = new List<Dagitici>
{
new Dagitici {Adi="Tekin", Soyadi="Uğurlu", Sehir="Van"},
new Dagitici {Adi="Hasan", Soyadi="Ünlü", Sehir="Ankara"},
new Dagitici {Adi="Tuncay", Soyadi="Çağrı", Sehir="Manisa"},
new Dagitici {Adi="Mehmet", Soyadi="Emre", Sehir="Muğla"}
};
return Dagiticilar;
}

static void Main(string[] args)
{
List<Musteri> musteriler = MusterileriGetir();
List<Dagitici> dagiticilar = DagiticilariGetir();

var birlestirmeSorgusu =
from musteri in musteriler
join dagitici in dagiticilar on musteri.Sehir equals dagitici.Sehir
select new { Sehir = musteri.Sehir,
MusteriAdi = musteri.Adi,
DagiticiAdi = dagitici.Adi
};

// LINQ Yöntem Sözdizimi ile sorgu :

/*
var birlestirmeSorgusu = musteriler.Join(
dagiticilar,
musteri => musteri.Sehir,
dagitici => dagitici.Sehir,
(musteri, dagitici) => new { Sehir = musteri.Sehir,
MusteriAdi = musteri.Adi,
DagiticiAdi = dagitici.Adi
}
);
*/

Console.WriteLine("Şehir, Dağıtıcı - Müşteri");
Console.WriteLine("-------------------------");

foreach (var satir in birlestirmeSorgusu)
{
Console.WriteLine("{0}, {1} - {2}", satir.Sehir,
satir.DagiticiAdi,
satir.MusteriAdi);
}

Console.ReadKey();

}
}
}
Çıktı :
Şehir, Dağıtıcı - Müşteri
-------------------------
Muğla, Mehmet - Kenan
Ankara, Hasan - Erhan
Ankara, Hasan - Ercan
Manisa, Tuncay - Yaşar
Not : Örneğimizdeki select cümleciğinde bir isimsiz sınıf kullandığımızdan foreach döngüsündeki satir değişkenini tip adını bilemeyeceğimizden dolayı mecburen var ile tanımlıyoruz (İsimsiz sınıfların isimleri derleyici tarafından derleme sırasında verilir).



Diğer LINQ Makaleleri:


Yazan: 09.04.16 20:49
canora
101,384p 4ü