Makale Özeti

Merhabalar, Bu makalemde LinqToSql ile SqlMethods sınıfının DateDiff ve Like method'larını inceliyor olacağız.

Makale

Linq hayatımıza girdiğinden beri neredeyse Ado.Net'i kullanmaz hale geldik. Fakat son projemde Linq ile LIKE deyimini kullanmak isteyişim beni biraz kısatlamıştı. Uzun araştırmalarım sonucunda LinqToSql ile DateDiff ve LIKE deyimlerini SqlMethods sınıfı ile kullanabilmemin mümkün olduğunu gördüm.

Uygulamaya geçmeden önce.

.NET 3.5 Framework ile Yeni bir web site uygulaması açalım.

Uygulamayı açtıktan sonra,


projemize Resimdeki gibi BizimDB adında Linq To Sql Classes ekleyelim.


(Resme tıklayarak resmi büyültebilirsiniz.)

Daha sonra BizimDB.dbml LinqToSqlClasses'ımıza Northwind veritabanımızdan Order ve Customer tablolarını ekleyelim(sürükle bırak mantığı ile ekleyebilirsiniz.)

Şimdi gelelim SqlMethods kısmına;

Öncelikle SqlMethods sınıfını kullanmak için projemize System.Data.Linq namespace'sini eklememiz gerekiyor.
Bunun için projemize sağ tıklayarak add refence diyerek;

System.Data.Linq kütüphanesini ekleyelim.

 

SqlMethods sınıfını incelememiz gerelirse;

DateDiff ve Like deyimlerini kısaca hatırlamak gerekirse;

Method Adı Açıklama
DateDiffDay Verilen iki tarih arasındaki Gün farkını verir.
DateDiffHour Verilen iki tarih arasındaki Saat farkını verir.
DateDiffMillisecond Verilen iki tarih arasındaki MiliSaniye farkını verir..
DateDiffMinute Verilen iki tarih arasındaki Dakika farkını verir.
DateDiffMonth Verilen iki tarih arasındaki Ay farkını verir.
DateDiffSecond Verilen iki tarih arasındaki Saniye farkını verir..
DateDiffYear Verilen iki tarih arasındaki Yıl farkını verir.
Like Bir veri içerisinde belirttiğimiz kurallara göre, uygun olan verileri getirir.

 

Örnek Uygulama Kodumuz ise;

            BizimDBDataContext DB = new BizimDBDataContext();

            var sorgu = from f in DB.Customers
                        where System.Data.Linq.SqlClient.SqlMethods.Like(f.City, "S%")
                        select f;

            var sorgu2 = from f in DB.Orders
                         where System.Data.Linq.SqlClient.SqlMethods.DateDiffHour(f.OrderDate, f.ShippedDate) < 36
                         select f;

            foreach (var item in sorgu)
            {
                Response.Write(item.City + "<br />");
            }

            Response.Write("-----------------------------<br />");

            foreach (var item in sorgu2)
            {
                Response.Write(item.ShipAddress + "<br />");
            }

 

BizimDB adında LinqToSqlClasses oluşturmuştuk hatırlarsanız. BizimDBDataContext sınıfı ile oluşturduğumuz sınıfın içerisindeki nesnelere erişeceğiz.

bilinçsizce türlendirilmiş sorgu değişkenimizin where koşuluna bakacak olursak, SqlMethods sınıfının like methoduna 2 parametre göndermişiz. f.City Customers tablomuzun city kolonu oluyor. Ve city kolonunda ilk harfi "S" ile başlayan verileri getirmemizi söyledik.

diğer sorgu2 değişkenimizin where koşuluna ise, SqlMethods sınıfının DateDiffHour methoduna 2 parametre gönderdik. Bunların birincisi Başlangıç tarihi, ikincisi ise bitiş tarihi. Kısaca bizim koşulumuzda sipariş ve sevk zamanı 36 saatten az bir zamanda olan verilerin gelmesini istedik.

iki farklı foreach döngüsü ile ekrana City ve ShipAddress'leri yazdırdık.

 

Bu makaleden sonra umarım LinqToSql projelerinizde SqlMethods class'ını kullanırsınız.


Saygılarımla

Serkan Pektaş