Makale Özeti

Bu makalemde LINQ to SQL uygulamalarında string methodlarının nasıl kullanıldığını, arka tarafta nasıl işlemler yapıldığını ayrıntılı bir şekilde ele alıyor olacağız.

Makale

Merhaba arkadaşlar,

Bu makalemizde LINQ to SQL uygulamalarında string methodlarının nasıl kullanıldığını, arka tarafta nasıl işlemlere tabi tutulduğunu ayrıntılı bir şekilde ele alıyor olacağız.

Makale LINQ to SQL ile ilgili başlangıç niteliği taşımamaktadır. Dolayısıyla daha öncesinde LINQ teknolojilerine giriş yapmadıysanız, aşağıdaki makaleleri okumanızda fayda  var.

LINQ - Dil ile Bütünleştirilmiş Sorgularının Gücünü Keşfedelim
LinqToSql ile SqlMethods Kullanımı

Basit bir şekilde açmış olduğum Console uygulamasına, Projemizde kullanmak üzere AdventureWorks adında bir adet LINQ to SQL Classes ekliyorum. Eklemiş olduğumda .dbml'e AdventureWorks veritabanı içerisindeki tüm tabloları koyuyorum.
Ve daha sonra kodlarımızı yazmaya başlıyorum.

using System;

using System.Linq;

 

namespace LINQStringMethods

{

    class Program

    {

        static AdventureWorksDataContext DB = new AdventureWorksDataContext();

 

        static void Main(string[] args)

        {

            var product = from f in DB.Products

                          select new { f.Name };

 

            Console.WriteLine("-------------------------------------------------");

            Console.WriteLine(product.First().Name);

            Console.WriteLine("-------------------------------------------------");

            Console.ReadLine();

        }

    }

}

Yukarıdaki koddanda göreceğimiz gibi, Product tablosuna bağlanıp, ilk kaydımızın Adını(Name kolonu) ekrana yazıyoruz.

Şimdi ise, basit bir şekilde string birleştirme olayını gerçekleştirelim.

        static void Main(string[] args)

        {

            var product = from f in DB.Products

                          select new { Ad = f.ProductID + " - " + f.Name };

 

            Console.WriteLine("-------------------------------------------------");

            Console.WriteLine(product.First().Ad);

            Console.WriteLine("-------------------------------------------------");

            Console.ReadLine();

        }

Burada dikkatinizi çekmek istediğim nokta "ProductID + " - " + f.Name" ifadesinde string birleştirme işlemini yapmak için mutlaka isimlendirme vermeliyiz.(Biz Ad olarak verdik.)
Peki bu işlem sırasında arka planda nasıl bir select sorgusu oluşuyor derseniz, hemen Debug moduna alarak bakalım.

 

Yukarıdaki şekilde görüldüğü gibi aslında TSQL select sorgusunda, ProductID int tipinde olduğu için onu öncelikle varchar tipine convert edip Name ile birleştirme yapmış. Daha sonra as diyerek sanal kolon adına Ad olarak adlandırmış. Aslında biz bunların hepsini LINQ tarafında belirledik :)

string methodlarına gelecek olursak,

string.Contains methodu ilgili string ifademizin içerisinde, vermiş olduğumuz string değerinin içerisinde olup olmadığını kontrol eder, Varsa true, yoksa false değer gönderir. Bu durumuda Containt methodunu where ifadesinde rahatlıkla kullanabiliriz.

        static void Main(string[] args)

        {

            var product = from f in DB.Products

                          where f.Name.Contains("Bike")

                          select new { Ad = f.ProductID + " - " + f.Name };

 

            Console.WriteLine("-------------------------------------------------");

            Console.WriteLine(product.First().Ad);

            Console.WriteLine("-------------------------------------------------");

            Console.ReadLine();

        }

 

peki ya sizde arkada tarafta nasıl bir where koşuluna çevriliyor? Tabikide tahmin ettiğiniz gibi LIKE '% %' ifadesine çevriliyor :)
Aşağıdaki select sorgusunu ilk örneğimizde yapmış olduğumuz gibi Debug modda çalıştırıp bakabilirsiniz.

SELECT ((CONVERT(NVarChar,[t0].[ProductID])) + @p1) + [t0].[Name] AS [Ad]

FROM [Production].[Product] AS [t0]

WHERE [t0].[Name] LIKE @p0

 

StartWiths methodu ise ilgili string ifadesinin verilen değer ile başlayıp başlamadığını kontrol eder. Olumlu ise true, değilse false değerini dönderir.

        static void Main(string[] args)

        {

            var product = from f in DB.Products

                          where f.Name.StartsWith("Bike")

                          select new { Ad = f.ProductID + " - " + f.Name };

 

            Console.WriteLine("-------------------------------------------------");

            Console.WriteLine(product.First().Ad);

            Console.WriteLine("-------------------------------------------------");

            Console.ReadLine();

        }

 

Arka taraftaki select sorgusunda tabikide LIKE ' %' ifadesi var :)

Fakat bu durumu görebilmek için SQL Server Profiler toolumuzu çalıştırıp bakmamız gerekli. Çünkü Like deyimindeki sonrdaki parametre tek tırnak olduğu için, burada tehlike potansiyeli çok yüksek dolayısıyla, oluşturulan select sorgusundan sonra, parametreye tek tırnak işaretleriyle beraber gönderiliyor. Eğer tehlikeli olabilecek karakterler var ise bunu deaktif edecek şekilde ikili tırnak gibi ifadelerle gönderiliyor. SSQL Server Profilerdan çalıştırılan select sorgusuna baktığımda ise

exec sp_executesql N'SELECT TOP (1) [t1].[value] AS [Ad]

FROM (

    SELECT ((CONVERT(NVarChar,[t0].[ProductID])) + @p0) + [t0].[Name] AS [value], [t0].[Name]

    FROM [Production].[Product] AS [t0]

    ) AS [t1]

WHERE [t1].[Name] LIKE @p1',N'@p0 nvarchar(3),@p1 nvarchar(5)',@p0=N' - ',@p1=N'Bike%'

 

Yukarıdaki select sorgusunu inceleyecek olursanız, tüm LINQ ifadelerimizde gelen sonuç kümesinin ilk değerini yazdırmıştık. Ve gördüğünüz gibi TOP (1) ifadesi kullanılmış bu işlem için.


Yapmış olduğumuz örneklerden sonra, LINQ ifadelerinde where yada select sorgularında string methodlarını rahatlıkla kullanabildiğimizi gördünüz. Aynı Şekilde DateTime methodlarınıda where yada select ifadelerinde kullanabiliriz. Bunları deneme yanılma yöntemi ile tek tek bakabilirsiniz.

Bu makalemde, LINQ to SQL uygulamalarında yazmış olduğumuz ifadelerin arka tarafta nasıl SQL sorgularına dönüştürüldüğünü incelemeye çalıştık. Dahada ileri düzeyde bakmak isterseniz farklı farklı string methodlarını LINQ ifadelerinde kullanarak nasıl SQL cümlelerine dönüştürüldüğünü inceleyebilirsiniz. Umarım bu makale ile birlikte LINQ sorgularının arka planda nasıl ele alınacağı konusunda biraz daha bilinçli olmuşsunuzdur.

Bir sonraki makalemde görüşmek dileğiyle

Serkan PEKTAŞ