Merhabalar, yaklaşık bir aydır ders ekleyemiyordum çünkü aklıma ekleyecek bir ders gelmiyordu. C# DataTable İçerisinde Arama Yapmak dersim ile C# eğitim setime devam ediyorum. Yazılım ile uğraştığım süre boyunca C# eğitim setime dersler eklemeye devam edeceğim.
C# DataTable İçerisinde Arama Yapmak
Bazı durumlarda elimizdeki bir DataTable içerisinde arama yapmamız gerekebiliyor. Benim durumumda, bir kullanıcının bir ekran için geçerli olan tüm yetkilerini alıp, datatable içerisindeki yetkiler üzerinde tek tek filtreleme yaparak aradığım yetki var mı yok mu şeklinde kontrol edip yetkileri ayarlamam gerekmişti. Yani veritabanından yetkileri tek tek çekerek değil tek seferde çekip daha hızlı olsun diye kod ile arama yapmak istemiştim.
Şimdi yukarıda bahsettiğim işlem için bir kaç yöntem buldum ve o yöntemleri sizle paylaşacağım.
NOT: Bu yöntemler, DataRow sınıfında geri dönüş vermektedir.
LINQ-To-DataSet Yöntemi
string aranan = ""; var filteli_satirlar = dt.AsEnumerable().Where(r => r.Field<String>("YETKI").Contains(aranan));
Bu yöntem, bildiğimiz t-sql benzeri bir yöntemdir. Yöntemin adında da anlayabileceğiniz gibi adı LINQ’tir. C# kodları ile sorgular yazabiliyoruz.
YETKI kolonu içerisinde, aradığımız veri geçiyor ise o DataRow’lar seçilmiş olacak.
ADO.NET
string aranan = ""; DataRow[] filtreli_satirlar = dt.Select("YETKI LIKE '%" + aranan + "%'");
Bu yöntem ile DataTable üzerinden select yapabiliyoruz. Yukarıdaki satırda gördüğünüz gibi aynı T-SQL’de yazdığımız where komutunu kullanıyoruz. Burada LIKE komutu ile “içerisinde xxxx geçenler” filtresi vermiş oluyoruz. Yukarıda sadece LIKE kullanıldı ancak T-SQL’deki gibi her türlü sorgulama şeklini kullanabilirsiniz. Yani birden fazla kolona göre filtre verebilirsiniz.
Yukarıda gördüğünüz gibi bu işlemi yapmak için iki yolumuz var. Elbette bu iki yol mutlak değildir. Ararsanız daha farklı yollar da bulabilirsiniz belki ama benim bulabildiğim en kısa yöntemler bunlar.
Notta da bahsettiğim gibi yukarıdaki işlemler DataRow olarak geri dönüş veriyor. Eğer filtrelenmiş satırları yeni bir datatable olarak almak isterseniz aşağıdaki kod satırını kullanabilirsiniz.
string aranan= ""; DataTable dtResult = tb.Select("YETKI LIKE '%"+aranan+"%'").CopyToDataTable();
BİLGİ: Arkadaşlar eğer bu gibi bir işlemi çok sık kullanmanız gerekiyor ise, bu kodları bir class haline getirerek kullanmanız daha el verişli olacaktır. Çünkü eğer arama yöntemini değiştirmek isterseniz her yerde tek tek değiştirmeniz gerekecektir ki size boş yere eziyet verecektir.
C# DataTable İçerisinde Arama Yapmak yazımda bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın.
Merhaba hocam
Öncelikle paylaşımın ve emeğin için teşekkür ederim. Bu bilgiler gerçekten çok kıymetli. Konuyla ilgili ek bir sorum olacak. Arama yaptığımız DataTable içinde dönen veriyi aynı tablodan silebilirmiyiz. Bilgi ve tecrübelerinizi paylaşırsanız sevinirim.
Teşekkürler
Merhaba,
Güzel yorumunuz için teşekkür ederim.
Tab iki silme işlemini yapabilirsiniz. Diyelim ki datatable’ınız içerisinde ID bilgisini aldınız ve bu ID bilgisine ait satırı silmek istiyorsunuz…
Aşağıdaki kodlar işinize yarayacaktır.
for(int i = dtPersonel.Rows.Count-1; i >= 0; i–)
{
DataRow dr = dtPersonel.Rows[i];
if (dr[“per_id”] == 5)
dr.Delete();
}
dtPersonel.AcceptChanges();