Linq İle Inner Join Kullanımı

21.06.2017 Hikmet Okumuş 2591 0 Linq & Lambda


Merhaba arkadaşlar,

Join, iki ya da daha fazla sonuç kümesini, bir ya da birden fazla kritere göre birbirine bağlayan ve geriye bir sonuç kümesi döndüren bir yapıdır. SQL Server' da olduğu gibi LINQ to SQL' de bize JOIN yazmamıza imkan vermektedir. Şimdi LINQ ile nasıl iki veri kümesini birleştireceğiz bunu örnek üzerinde inceleyelim.

Örneğimizde Northwind veritabanı kullanılacaktır. Veritabanı içerisinde bulunan Products ve Categories tabloları için bir INNER JOIN sorgusu oluşturacağız. LINQ öncesinde bu işlemi SQL sorgusu ile yapmak isteseydik, aşağıdaki gibi bir sorgu oluşturmamız gerekecekti.

SELECT P.ProductName, C.CategoryName 
FROM dbo.Products P
INNER JOIN dbo.Categories C ON P.CategoryID = C.CategoryID

www.hikmetokumus.com

Şimdi benzer örneği LINQ ile yazalım ve iki tabloyu INNER JOIN ile birleştirelim.

using (var context = new NorthwindContext())
{
    var result = from p in context.Products
                 join c in context.Categories on p.CategoryID equals c.CategoryID
                 select new
                 {
                     ProductName = p.ProductName,
                     CategoryName = c.CategoryName
                 };

    result.ToList().ForEach(x =>
    {
        Console.WriteLine($"Product Name: {x.ProductName}, Category Name: {x.CategoryName}");
    });
}

www.hikmetokumus.com

İlk örneğimizde, sonucu doğrudan SQL sorgusu yazarak görmüştük. Şimdi LINQ ile yazdığımız kodun, bizim için arka tarafta oluşturmuş olduğu SQL sorgusuna bakalım.

SELECT 
[Extent2].[CategoryID] AS [CategoryID], 
[Extent1].[ProductName] AS [ProductName], 
[Extent2].[CategoryName] AS [CategoryName]
FROM  [dbo].[Products] AS [Extent1]
INNER JOIN [dbo].[Categories] AS [Extent2] ON [Extent1].[CategoryID] = [Extent2].[CategoryID]

LINQ tarafından oluşturulan sql sorgusuna baktığımız zaman, ilk örnekte yazılan sorgu ile benzer bir sql ifadesinin oluştuğu görülmektedir. JOIN ifadesinde kullanılan equals anahtarı, eşitliği karşılaştırmak için kullanılmıştır. equals yerine "==" şeklinde bir eşitlik kontrolü kullanamayız. LINQ, JOIN işlemi için bu şekilde bir syntax' ı desteklememektedir. Eğer işlemimiz gereği equals yerine not equals şeklinde bir sorgulama yapılacaksa, bu tarz bir syntax' ı da LINQ desteklememektedir. Eşit değil gibi bir kontrol için farklı yöntemler kullanılabilmektedir.


Başarılar dilerim.




Yorum