LINQ to SQL Classes

ASP.NET 3.5 ile Visual Studio ya dahil edilen LINQ, uygulama geliştiricilerin işini çok daha kolaylaştırıyor. Adından da anlaşılacağı gibi dile entegre edilmiş sorgulama sayesinde birçok veri yapısı için sorgular oluşturup bu sorgular üzerinde basitçe işlemlerinizi gerçekleştirebiliyorsunuz. Bu tekniği hem Windows Uygulamaları hemde Web Uygulamalarında kullanabilirsiniz.

Bu örnekte LINQ’i kullanarak dinamik sorgu ile Web Formumuzdaki Grid’i filitreleme yaparak dolduracağız. TextBox’tan aldığımız arama kriterine göre veri kaynağında sorgulama yapıp sonuçu Grid’te gösterelim. Bunun yanında sorgulam işlemi dinamik olarak gerçekleşeceği için Ajax kontrollerinden de yararlanmakta fayda var.

Öncelikler File>New Web Site diyerek aşağıdaki ayarları seçelim.
Language olarak C# ve .NET Framework 3.5’in seçili olduğuna emin olun!!

linq-to-sql-classes-1

linq-to-sql-classes-1

Şimdi sayfamıza kontrollerimizi yerleştirelim.
Öncellikle AJAX kontrollerini kullanacağımız için sayfamınz ScriptManager kontrolü olması gerek.”Ajax Extensions” tab’ından Script Manager’ı sürükleyip forumun üzerine bırak.
Aynı tab içerinden bulunan UpdatePanel ve onun hemen altına UpdatePanelProgress kontrollerini sürükleyip bırakın.
Ve son olarak UpdatePanel’in içerisine TextBox ve yine UpdatePanel’in içerisine GridView sürükleyip bırakın.
UpdatePanelProgress kontrolünün içerisinede “Lütfen Bekleyiniz…” yazın.

Son olarak .aspx aşağıdaki gibi olmalıdır.

linq-to-sql-classes-2

linq-to-sql-classes-2

Tasarım kısmını bitirdik şimdi gelelim veritabanı ve LINQ kısmına.

Website>Add New Item diyelim ve açılan ekranda LINQ to SQL Classes ‘ı seçelim isim olarakta Veriler.dbml ismini verelim. Karşınıza bir uyarı ekranı çıkıcak ve dbml dosyasnını App_Code klasoruna kopyalanması için sizden onay istiyecek Yes diyerek devam edelim.

linq-to-sql-classes-3

linq-to-sql-classes-3

Karşınıza bu şekilde bir ekran çıkacak. Burada kendi tablolarınız oluşturup aralarında ilişkiler kurabilir ve bu yapıyı bir class (Nesne) olarak uygulamanızda kullanabilirsiniz. Fakat bizim yapmak istediğimiz bu yapıyı varolan bir Sql (farklı bir veri kaynağıda olabilir) tablosundan oluşturmak. Bu nedenle Server Explorer penceresinden ( eğere göremiyorsanız View>Server Explorer diyerek aktif hale getirin) SQL serverdaki bir veritabanına bağlantı kuralım ve bu veritabanı içerisindeki herhangi bir tabloyu ortadaki alana sürükleyip bırakalım. Seçtiğiniz tablo içerisinde fazla kayıt olması sonucu daha rahat görmemizi sağlıyacaktır.

linq-to-sql-classes-4

linq-to-sql-classes-4

Ben 2 tane kolonu olan ILLER tablomu kullandım. Siz daha farklı tabloda kullanabilirsiniz.
Dbml dosyasını kaydedin ve Default.aspx’e geri dönelim. Formun üzerine koyduğumuz TextBox’ın AutoPostBack özelliğini True yapalım ve Textbox’ın üzerine çift klik yaparak TextChanged event’inde kodumuzu yazalım. “TextChanged eventinin çalışabilmesi için TextBox’ın AutoPostBack özelliğini True yapmamız gerekir. Textbox’a kullanıcı veri girişi yaptıktan sonra kontrolden ayrılırken TextChanged event’i çalışır.”

VerilerDataContext Kaynak = new VerilerDataContext();
var sonuc = from ara in Kaynak.ILLERs
where ara.IL.ToLower().StartsWith(TextBox1.Text)
select ara;

System.Threading.Thread.Sleep(1000);
GridView1.DataSource = sonuc;
GridView1.DataBind();

Kodu inceliyecek olursak Veriler.dbml dosyasını projemize eklediğimizde otomatik olarak oluşan VerilerDataContext class’ını kullanarak sorgulama yaptık. Dikkat edin, LINQ ile sorgulama yaparken C#’a ait String fonksiyonlarından da yararlandık.

Uygulamamızı çalıştırıp deneyelim.

İşte burada LINQ kullanarak kullanıcının TextBox’a girdiği değere göre dinamik olarak soru yapıyoruz ve sonucu GridView’de gösteriyoruz. Ajax kontrollerimizi kullanmamızın sebebide her TextChanged eventi çalıştığında sayfamız Refresh olmadan güncellenmesi içindi.

System.Threading.Thread.Sleep(1000);

Bu satırdaki amaç, sayfamız web ortamında çalışıyormuş izlenimini vermek için kodu satırını 1 saniye bekletik. Burada 1 saniyelik bekleme için UpdatePanelProgress’teki “Lütfen Bekleyiniz…” yazısını da görmüş olduk. Eğere 1 saniye bekletmeseydik localde çalıştığımız için veriyi çok hızlı yükliyecekti ve biz “Lütfen Bekleyiniz…” yazısını göremiyecektik.