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).