Sql Server’da durum nasıl bilmiyorum ama geçenlerde Oracle’da şöyle bir durum farkettim: Where kısmında kullandığımız NOT IN komutu, IN komutunun birebir tersi şeklinde bir sonuç getirmeyebiliyor. Şart kısmında belirttiğimiz değerler içinde NULL olan kayıt varsa işler oldukça değişebiliyor. Küçük bir örnekle açıklamak gerekirse:
Linq Sorgusunu Datatable’a Çevirme
Yeni teknolojilerden mahrum kalmamak adına üzerinde çalıştığım bir projede Linq To Sql kullandım ve bayağı bir faydasını da gördüm. Veritabanına ulaşmak, oradan veri çekmek, veri ekleme, silme, güncelleme gibi işlemler inanılmaz kolaylaştı.
Fakat her ilacın yan etkisi olduğu gibi Linq To Sql’in de bize yaşattığı aksaklıklar oldu tabi. Bu aksaklıklar projenin bayağı aksamasına da sebep oldu. Tabi aksaklıkların Linq’dan değil de benim acemiliğimden ya da yeniliklere adapte olamadığımdan kaynaklandığını da düşünebiliriz. Fakat şimdi değineceğim konuyu biraz irdelerseniz bu sorunların aslında bir çok kişi tarafından yaşandığını görürsünüz.
Projede datalist içinde sayfalama sistemi yapmam gerekiyordu. Bunun için de PagedDataSource(bkz. yazgeliştir) nesnesini kullanacaktım. Fakat bir sorun vardı. Yazdığım Linq sorgusunu PagedDataSource’a bağlayamıyordum. Önce normal DataTable’a, oradan da PagedDataSource’a bağlayayım dedim ama nafile. Sürekli hata mesajlarıyla karşılaşıyordum. Bu konuyu araştırmak üzere Google amcaya başvurduğumda sorunu çözmek uzun sürmedi ama bir şeyi farkettim ki, bu konuda(Linq sorgusunu Datatable’a dönüştürme) hali hazırda bir metod, sınıf vs. yok. Sorunun çözümü için herkes kendine göre bir metod yazıp işini görmüş. Ben de kendi metodumu yazmak yerine hazıra onmayı tercih ettim ve buradan metodu kopi peyst yapıp vb diline çevirerek kullandım
.
Metodun c# versiyonunu buradan alabilir veya benim hazırladığım vb versiyonuna da aşağıdan bakabilirsiniz:
Public Function ToDataTable(ByVal ctx As System.Data.Linq.DataContext, ByVal query As Object) As DataTable Dim cmd As IDbCommand = ctx.GetCommand(query) Dim adapter As New SqlDataAdapter adapter.SelectCommand = CType(cmd, SqlCommand) Dim dt As New DataTable("sd") Try cmd.Connection.Open() adapter.FillSchema(dt, SchemaType.Source) adapter.Fill(dt) Finally cmd.Connection.Close() End Try Return dt End Function |
Kullanım Şekli:
Dim tmpTags As New UI_Class.UIData Dim query = From t In tmpTags.LU_TAGs _ Where t.VALID = 1 _ Group t By t.DS_TAG Into Count() _ Select DS_TAG, TAG_COUNT = Count Dim dtTemp As New PagedDataSource dtTemp.DataSource = ToDataTable(tmpTags, query).DefaultView |
Bu yazının da sonuna böylece gelmiş olduk. İnşallah faydası olur temennisiyle; görüşmek üzere.
Etiketler: ASP.NET, datatable, featured, Linq, linq to sql
- Linq To Sql Ve N Katmanlı Mimarimiz
- Yazılım Aylığı Mı Olsak Ne?
- FileUpload İle Aynı İsimde Birden Fazla Dosya Kaydetme


