none
Datacache içinde filtreleme RRS feed

  • Soru

  • Merhaba arkadaşlar bir site düşünün benzer sorguları 5-6 kez çekmek gerekiyor yani anasayfası için

    select * from haberler where tur='d'

    select * from haberler where tur='a'

    select * from haberler where tur='c'

    şeklinde yaptgımızda otomatik olarak 3 tane sql sorgusu cekiyoruz ben şimdi alternatik olsun diye hepsi için tek tek 

     Page.Cache.Insert("ui",tablo, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration);

    ile datacache olusturdum ama benim istediğim sadece bir defa

    select * from haberler diye sql sorgusu cekip bunu cache atsam sonra bunun içindeki verilere göre istediğimi ceksem olur mu yada böyle birşey varmı ? sonucta boylece sadece 1 defa db den veri cekicem diger işlemler için cache kullanıcam


    yok

    9 Mart 2013 Cumartesi 13:35

Yanıtlar


  • Hatayı almanın sebebi where keywordunu kullanmış olman onu kullanmana gerek yok

    RowFilter="kategori<>'d'";

    Zaten datayı filtrelemek için yazılmış bir sınıf olduğu için where  defaultda uygulanıyor.

    Zaten datayı filtrelemek için dedik ya  senin diğer yanlış kullanımlarına da değinip aslında Cache içinde DataTable değil GenericList tutup tüm işlemleri onun üzerinde yapabileceğini belirtelim

    RowFilter ile Order by Yapamazsın.

    Rowfilter ile limit  kullanamazsın. O uygulanan filtrede ne kadar data varsa onu getirir.

    List<MySinif> data=new List<Mysinif>(); data=loadData(); Page.Cache("ui",data,null,DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration); List<MySinif> CacheDekiList=Cache["ui"] as List<MySinif>; CacheDekiList.Where(p =>p.Kategori=='d' && p.etiket.Contains('incele')).OrderByDescending(z => z.id).Take(6).ToList();



    9 Mart 2013 Cumartesi 17:29

Tüm Yanıtlar

  • Cache içine DataTable attığını düşünürsek, Cache içinde ki DataTable dışarı çıkartıp onun üzerinde Filtre uygulayabilirsin.

    DataTable dt= SQLData();
    
    Page.Cache("ui",dt,null,DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration);
    
    DataTable CacheDekiTablo=Cache["ui"] as DataTable;
    
    CacheDekiTablo.DefaultView.RowFilter="tur='c'";
    
    Repeater1.DataTable=CacheDekiTablo;
    

    Yazım hatası olabilir, burda yazdım.


    9 Mart 2013 Cumartesi 15:35
  • Şimdi bu işlem sayesinde 3 defa veritabanında bilgi çekmiyoruz degilmi sadece 1 defa veri çekip o veri üzerinden filtreleme yapıyoruz degilmi ?

    yok

    9 Mart 2013 Cumartesi 16:55
  • Birde dediğin şekilde uyarladım fakat row.filter sekmesine

    where kategori<>'d' and onay='1' and ydurum='1' and etiket like '%incele%' order by id desc limit 6;

    bunu yazınca

    Missing operand after 'kategori' operator.

    bu şekilde hata alıyorum bunu nasıl çözeriz ?


    yok

    9 Mart 2013 Cumartesi 16:59

  • Hatayı almanın sebebi where keywordunu kullanmış olman onu kullanmana gerek yok

    RowFilter="kategori<>'d'";

    Zaten datayı filtrelemek için yazılmış bir sınıf olduğu için where  defaultda uygulanıyor.

    Zaten datayı filtrelemek için dedik ya  senin diğer yanlış kullanımlarına da değinip aslında Cache içinde DataTable değil GenericList tutup tüm işlemleri onun üzerinde yapabileceğini belirtelim

    RowFilter ile Order by Yapamazsın.

    Rowfilter ile limit  kullanamazsın. O uygulanan filtrede ne kadar data varsa onu getirir.

    List<MySinif> data=new List<Mysinif>(); data=loadData(); Page.Cache("ui",data,null,DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration); List<MySinif> CacheDekiList=Cache["ui"] as List<MySinif>; CacheDekiList.Where(p =>p.Kategori=='d' && p.etiket.Contains('incele')).OrderByDescending(z => z.id).Take(6).ToList();



    9 Mart 2013 Cumartesi 17:29
  • Peki hocam asp.net söyle bir olay varmı ?

    Misal ben sql sorgusu ile son 100 kayıtı aktarsam ona ondan sonra onun üzerinde istediğim şekilde filtreleme filan yapsam ?

    +

    RowFilter kullandıgımızda limit olayını itemtemplate sekmesinde if ile filan halledebilirizde , order by olayına alternatif birşey varmı ?

    Şimdiden yardımlarınız için çok teşekkür ederim


    yok

    9 Mart 2013 Cumartesi 19:08