Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Turhal Temizer
Turhal Temizer
http://www.turhaltemizer.com
İletişme geçmek için tıklayın.
92 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: full generic inner join left linq outer right sql to tsql Kodlama Turhal Temizer
 
YAZI HAKKINDA
Türü : Serbest Köşe (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : Kodlama
Yayınlanma Tarihi : 10.5.2010
Okunma Sayısı : 55394
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 8.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 8.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 8.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 8.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
LINQ to SQL - JOIN
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

LINQ to SQL verileri uygulama içerisinde nesnesel olarak kullanabilmemize ve işlemlerimizi oldukça kolaylaştıran bir yapıdır. Select, insert, update, delete ve diğer aklımıza gelen SQL işlemlerini basitçe yapabiliyor ve verileri hızlıca bizlere sunabiliyor. Bu yazımızı bana sıklıkça gelen maillerden ötürü yazacağım. Özellikle LINQ to SQL ile ilgili konudaki mailleri filtrelediğimde en sık sorulan sorunun nasıl JOIN ‘in kullanılacağı olduğundan LINQ to SQL ile join işlemlerini nasıl yapabileceğimizi basitçe ve örneklerle inceleyeceğiz.

Uygulamada yer alan örnekleri ve kullanbilmeniz için sisteminizde Nortwind veri tabanının kurulu olması ve oluşturmuş olduğunuz projenin en az .Net Framework 3.0 sürümünde oluyor olması gerekmektedir.
Oluşturulan projeye LinqToSQL veri katmanı ekleniyor, içerisine Nortwind veri tabanı gösteriliyor ve kod kısmında,

NorthwindDataContext dataContext = new NorthwindDataContext();




İle veri kümesine gerekli bağlantıyı kuruyoruz.

Inner Join


var q1 = from c in dataContext.Customers  
         join o in dataContext.Orders on c.CustomerID equals o.CustomerID
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };

LINQ to SQL sorgusu sonucunda oluşan arka tarafta çalışan SQL sorugusu aşağıdaki gibidir.

Not: Oluşan sorguları kontrol etmek için SQL versiyonunun bulunduğu klasöre gidip Performance Tools içerisinde yer alan SQL Server Profiler ‘i kullanarak erişebilirsiniz.

SQL Server Profiler


SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID], [t1].[OrderDate]  
FROM [dbo].[Customers] AS [t0]
INNER JOIN [dbo].[Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]

İlişkili iki tabloyu tek kriter ve inner join ile nasıl eşleştirebileceğimize göz attık.

Left Join


var q2 = from c in dataContext.Customers  
         join o in dataContext.Orders on c.CustomerID equals o.CustomerID into g
         from a in g.DefaultIfEmpty()
         select new
         {
             c.CustomerID,
             c.ContactName,
             a.OrderID,
             a.OrderDate
         };

Left Join kullanımının Inner Join kullanımından tek farkı ve en büyük farkı standart şekilde verileri join ettikten sonra bu birleşime into deyimi yardımı ile bir alias veriyoruz ve sonrasında ana tabloyu join edilmiş tablonun içindekiler yardımı ile verileri getir diyoruz. Ancak eşleşmeyen olmama ihtimalini de göz önüne alarak DefaultIfEmpty() de kullanılarak Left Join işlemi sağlanmış olur.


SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID] AS [OrderID]
, [t1].[OrderDate] AS [OrderDate]
FROM [dbo].[Customers] AS [t0]
LEFT OUTER JOIN [dbo].[Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]

Yaptığımız işlemin Left Join ile ilgili işlemleri sağladığını oluşan SQL kodu yardımı ile görebiliyoruz.

Inner Join – Birden Fazla Kriter ile İlişkilendirmek

Tablolar arası Join işlemlerini yaparken çoğunluklu tek kriter yerine birden fazla kriter yardımı ile ilişki kurulduğu daha çok gözlemlenebilecek bir durumdur. Bu şartlar altında şimdi birden fazla kriter yardımı ile Inner Join işlemini nasıl yapabileceğimize göz atalım.


var q3 = from c in dataContext.Customers  
         join o in dataContext.Orders on
new { a = c.CustomerID, b = c.Country }
equals new { a = o.CustomerID, b = "TR" }

         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };

Bu koşulu sağlamak için tek yapmamız gereken karşılaştıracağımız parametleri aynı sıra halinde olacak şekilde generic koleksiyon içerisinde kullanarak equals deyimi yardımı ile eşlemek olacaktır.


SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID], [t1].[OrderDate]  
FROM [dbo].[Customers] AS [t0]
INNER JOIN [dbo].[Orders] AS [t1] ON ([t0].[CustomerID] = [t1].[CustomerID])
AND ([t0].[Country] = @p0)

Inner Join – Birden Fazla Kriteri OR ile İlişkilendirmek

Tablolar arası ilişki kurarken karşılaştıralan bütün kriterlerin hepsinin aynı anda sağlanması istenmeye bilir. Bu durumda SQL üzerinde kullandığımız OR deyimini LINQ to SQL ‘e nasıl uyarlayabileceğimize göz atacağız.


var q4 = from c in dataContext.Customers  
         from o in dataContext.Orders.Where(a => a.CustomerID == c.CustomerID
|| c.Country == "USA")
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };

Kullanmamız gereken sadece AND yerine || ifadesi olacaktır.


SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID], [t1].[OrderDate]  
FROM [dbo].[Customers] AS [t0], [dbo].[Orders] AS [t1]
WHERE ([t1].[CustomerID] = [t0].[CustomerID]) OR ([t0].[Country] = @p0)

Left Join – Birden Fazla Kriteri OR ile İlişkilendirmek

Tablolar arasında birden fazla kriterleri Inner Join ile birlikte Left Join ile de birleştirebiliriz. Yine || ifadesi yardımı işlemi gerçekleştireceğiz.

var q5 = from c in dataContext.Customers  
         from o in dataContext.Orders.Where(a => a.CustomerID == c.CustomerID
|| c.Country == "USA").DefaultIfEmpty()
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };

Inner Join yardımı ile yapmış olduğumuz işlem ile aynı olmakla birlikte fark olarak yine DefaultIfEmpty() deyimidir.

Not: Left Join işlemi kullandığınızda kesinlikle yapmış olduğunuz ilişkiyi DefaultIfEmpty()  ile bitirmeniz gerekmektedir.

SELECT [t0].[CustomerID], [t0].[ContactName], [t1].[OrderID] AS [OrderID]
, [t1].[OrderDate] AS [OrderDate]
FROM [dbo].[Customers] AS [t0]
LEFT OUTER JOIN [dbo].[Orders] AS [t1] ON ([t1].[CustomerID]=[t0].[CustomerID])
OR ([t0].[Country] = @p0)

Sonuç olarak bu yazımızda LINQ to SQL yardımı ile Join işlemlerini nasıl yapabileceğimizi örnekler yardımı ile incelemeye çalıştık.

Umarım yararlı olmuştur.

Turhal Temizer
www.turhaltemizer.com

Makale:
LINQ to SQL - JOIN Kodlama Turhal Temizer
  • Yazılan Yorumlar
  • Yorum Yaz
HAZ
3
2012
http://weblogs.asp.net/rajbk/archive/2010/03/12/joins-in-linq-to-sql.aspx :) Saygılar
TEM
5
2010
Merhaba Hocam, Makale İçin Çok Teşekkür ederim C# 'a Yeni Başlıyorum hayırlısıyla phpdeki kodları çok çağrıştırıyor =) Umarım Bu Progrmlama dilinide öğrenebilirim
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor