DataTable.Compute Metodu
Uygulamalarımızda özet bilgiye ihyacımız olduğunda çoğu zaman T-Sql Aggregate fonksiyonlarını kullanıyoruz. Bu fonksiyonlar ile veriler üzerinde toplama,ortalama alma,kayıt sayısı,en büyük değer,en küçük değer vb. gibi verilerimizi oluştururuz. Bu verileri T-Sql Aggregate fonksiyonlarını DataTable sınıfının Compute metodu ile nasıl oluşturabileceğimizi inceleyeceğiz. Peki neden DataTable Compute metodunu kullanalım? Cevap yine her zamanki gibi performans ,hız olacaktır. Hesaplamalar için Sql sunucusuna tekrar tekrar gitmek yerine belleğe alınmış kayıt listesi üzerinden hesaplama yapıp özet verilerimizi çok daha hızlı bir şekilde ağ trafiği oluşturmadan amacımıza ulaşabiliriz.
Compute metodumuz iki değer almaktadır. Birinci değer (SUM,AVG,COUNT) gibi Aggregate fonksiyonlarının kullanılacağı ifade. İkinci değerimiz ise bir koşul belirtip filtre uygulayıp Aggregate fonksiyonunun çalışmasını sağlamaktır. Ör: Kategorisi cep telefonu olan kaç tane ürünlerin ortalama fiyatı, fiyatı 100Tl üzerinde kaç ürün stokta bulunmaktadır.
DataTable sınıfının Compute metodu bize geriye object tipinden değer döndürmektedir. Dönen değer üzerinden ihtiyacımıza göre gerekli tipe convert edip kullanabiliriz. Ben örneğimde AdventureWorks veritabanında bulunan Production.Product tablosunu kullanmaktayım.
[csharp]
string db = "Data Source=.;Initial Catalog=AdventureWorks2012;User ID=sa;Password=1";
SqlConnection con = new SqlConnection(db);
SqlDataAdapter da = new SqlDataAdapter("select ProductID,Name,ListPrice from Production.Product", con);
DataTable dt = new DataTable();
da.Fill(dt);
grdData.DataSource = dt;
lblBirimFiyati.Text = dt.Compute("AVG(ListPrice)", "").ToString();
lblToplamFiyati.Text = dt.Compute("SUM(ListPrice)", "").ToString();
this.Text += " – " + dt.Compute("Count(ListPrice)", "").ToString();
lblFilter.Text = dt.Compute("SUM(ListPrice)", "ListPrice>500").ToString();
[/csharp]
Yararlı olması dileğiyle…