none
Siparişlerin içinde arama yapıp listeleme RRS feed

  • Soru

  • Merhaba Siparisler adında bir tablom var; bunun içinde UstId si ile Id numaraları eşit

    siparişleri listelediğimde UstId 'si NULL olanları listeliyorum sipariş numarasına tıklandığında UstId'si id ye eşit olanlar listeleniyor

    örnek tablo; 

    yapmak istediğim textbox tan kemer yazılınca içiresinde keme olan  ana satırları listelemek

    192  ve 187 numaralı siparişleri listelemesi

    yaptığım çalışmada listeleniyor fakat sadece bir kayıt çekebiliyorum

    string kelime = Request.QueryString["Kelime"].ToString();

     var ara = from i in db.ToptanSiparisler.ToList()
                          where i.UstId != null && i.UrunAdi.ToLower().Contains(kelime)
                          select i;

       foreach (var item in ara)
                     {
                    var sonuc = db.ToptanSiparisler.Where(i => i.id == item.UstId).ToList();

                        DtlTopanSiparisListesi.DataSource = sonuc;
                        DtlTopanSiparisListesi.DataBind();

                         }



    18 Ekim 2019 Cuma 10:42

Tüm Yanıtlar

  • Hiç tablo yapısını yanlış yapmış olabileceğiniz hissi uyandı mı sizde? Tabloda şapka terlik fln yazıyor...

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    18 Ekim 2019 Cuma 12:38
    Moderatör
  • ürünün adı şapka terlik olduğu için yazıyor, ayrıca örnek bir tablo bu, yanlış olan nedir ?
    18 Ekim 2019 Cuma 12:42
  • ürünün adı şapka terlik olduğu için yazıyor, ayrıca örnek bir tablo bu, yanlış olan nedir ?

    Komple yanlış. Sadece bu iş için üç ayrı tablo yapmalısınız, (Müşteriler tablosu hariç);

    1. Tablo ÜrünKartları tablosu

    Id Ürün Adı
    1 Terlik
    2 Kolye
    3 Vazo


    2. Tablo Siparişler tablosu

    Id Tarih        MüşteriId Durum
    1 2019-10-17 43 1
    2 2019-10-17 89 0
    3 2019-10-18 14 0


    3. Tablo SiparişDetayları tablosu

    Id SiparişId ÜrünId  Fiyat    Miktar
    1 1 3 18,0000 2
    2 1 1 12,7500 1
    3 2 3 18,0000 1
    4 3 2 186,0000 1
    5 3 3 18,0000 4


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    18 Ekim 2019 Cuma 14:55
    Moderatör
  • EntityFramework için örnek,

    public class ETradeContext:DbContext 
    {      
      public DbSet<Product> Products { get; set; }   
    }

          

    public class Product  {        public int Id { get; set; }   public int UstId { get; set; }    public string SiparisNo { get; set; }   public string UrunAdi { get; set; }   

    }


     public List<Product> GetByName(string key)
            {
                using (ETradeContext context = new ETradeContext())//for garbage
                {
                    return context.Products.Where(p => p.UrunAdi.Contains(key)).ToList();
    
                }
            }

            private void SearchData(string key)
            {
                var result = _productDal.GetByName(key);
                dgwProducts.DataSource = result;
    
            }


    • Düzenleyen Einsatzgruppens 19 Ekim 2019 Cumartesi 08:34 Bir kod bloğunun fazla olmasından dolayı.
    18 Ekim 2019 Cuma 23:50
  • EntityFramework için örnek,

    public class ETradeContext:DbContext 
    {      
      public DbSet<Product> Products { get; set; }   
    }

          

    public class Product  {        public int Id { get; set; }   public int UstId { get; set; }    public string SiparisNo { get; set; }   public string UrunAdi { get; set; }   

    }


     public List<Product> GetByName(string key)
            {
                using (ETradeContext context = new ETradeContext())//for garbage
                {
                    return context.Products.Where(p => p.UrunAdi.Contains(key)).ToList();
    
                }
            }

            private void SearchData(string key)
            {
                var result = _productDal.GetByName(key);
                dgwProducts.DataSource = result;
    
            }


    bu şekilde olmadı malesef
    23 Ekim 2019 Çarşamba 13:30
  • Tam olarak neresinde olmadı ? 

    Altan Özdemir

    23 Ekim 2019 Çarşamba 14:30
  • EntityFramework için örnek,

    public class ETradeContext:DbContext 
    {      
      public DbSet<Product> Products { get; set; }   
    }

          

    public class Product  {        public int Id { get; set; }   public int UstId { get; set; }    public string SiparisNo { get; set; }   public string UrunAdi { get; set; }   

    }


     public List<Product> GetByName(string key)
            {
                using (ETradeContext context = new ETradeContext())//for garbage
                {
                    return context.Products.Where(p => p.UrunAdi.Contains(key)).ToList();
    
                }
            }

            private void SearchData(string key)
            {
                var result = _productDal.GetByName(key);
                dgwProducts.DataSource = result;
    
            }


    bu şekilde olmadı malesef

    Ben bunu size bir örnek olarak atmıştım, detaya inersek ; (ben öğrenciyim bu arada üstadlar çok daha iyi bilirler) tablo yapınız yanlış evet ama çözülebilir kesinlikle. (Önay hoca fırçalamazsa beni iyi :P )

    1- EntityFramework'da en önemli kurallardan birisi, veritabanımızdaki tabloya karşılık gelen bir sınıfın(class)olmasıdır. (Product)

     public class Product
        {
            public int Id { get; set; }
            public string UstId { get; set; }
            public decimal SiparisNo{ get; set; }
            public int UrunAdi{ get; set; }
        }

    2- Bunun EntityFramework Context'te olabilmesi için EntityFramework'un DbContext kütüphanesinden inherit edilmesi gerekiyor.

       public class ETradeContext:DbContext
        {
            public DbSet<Product> Products { get; set; }
        }


    Liste getireceğimiz için "List<Product>" kullanıyoruz, ancak tek getirmek isteseydik sadece Product yeterliydi.

    public class ProductDal { public List<Product> GetAll() { using (ETradeContext context = new ETradeContext()) { return context.Products.ToList(); } } //veritabanı sorgulaması... (anahtar sözcüğe göre Arama) public List<Product> GetByName(string key) {

    using (ETradeContext context = new ETradeContext()) { //Çok fazla verimiz olduğu zaman bu her zaman daha performanslıdır. Çünkü sadece ihtiyacımız olan datayı almış oluyoruz... return context.Products.Where(p => p.Name.Contains(key)).ToList(); } } }

    Connection String

    Burası önemli lütfen aşağıdaki connection string'i direkt kopyalamadan önce şunu iyice bir okuyun derim ; https://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx

     <connectionStrings>
        <add name ="ETradeContext"
             connectionString=
             "server=(localdb)\mssqllocaldb;initial catalog=SizdekiAdıHerNeyse;integrated security=true" 
             providerName="System.Data.SqlClient"/> <!--Prodiver = sağlayıcı-->
      </connectionStrings>

    Ben x bir örnek üzerinden devam ediyorum, siz kendi programınıza göre uyarlarsınız, gerisi zaten sadece artık filtre yapmak, data grid view üzerinden çağırmak veya her neyse.

    f1 - ;

     ProductDal _productDal = new ProductDal();

    f2 - ;

    Ürünleri yükle. (Artık nereye yüklemek istiyorsanız, ben bendeki örneğe göre gittim)

     private void LoadData()
            {
                dgwProducts.DataSource = _productDal.GetAll();
            }
           private void SearchData(string key)
            {
                var result = _productDal.GetByName(key);
                dgwProducts.DataSource = result;
    
                lblSearchCount.Text = "Toplam " + result.Count.ToString() + " Adet aramayla eşleşen ürün bulundu.";
            }

     Ayrıca bkz : Engin DEMİROĞ detaylıca anlatıyor bunları kesinlikle öneririm.


    23 Ekim 2019 Çarşamba 19:32
  • (Önay hoca fırçalamazsa beni iyi :P )

    "Sipariş kime ait, nezaman verilmiş, durumu ne" unları nerede saklayacağınızı da belirtirmisiniz, ya da birisi ayakkabı yerine ayakabı yazarsa yanlışlıkla? ya da bu siparişler 5-10 sene sonra 100binli seviyelere ulaştığında tahmini database performansını .... ?

    Relational DB kullanıyorsanız kuallarına uymalısınız.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    24 Ekim 2019 Perşembe 07:17
    Moderatör
  • (Önay hoca fırçalamazsa beni iyi :P )

    "Sipariş kime ait, nezaman verilmiş, durumu ne" unları nerede saklayacağınızı da belirtirmisiniz, ya da birisi ayakkabı yerine ayakabı yazarsa yanlışlıkla? ya da bu siparişler 5-10 sene sonra 100binli seviyelere ulaştığında tahmini database performansını .... ?

    Relational DB kullanıyorsanız kuallarına uymalısınız.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    Teşekkürler Önay hocam; 

    Önce Db Yapısını değiştireceğim.

    24 Ekim 2019 Perşembe 10:54
  • (Önay hoca fırçalamazsa beni iyi :P )

    "Sipariş kime ait, nezaman verilmiş, durumu ne" unları nerede saklayacağınızı da belirtirmisiniz, ya da birisi ayakkabı yerine ayakabı yazarsa yanlışlıkla? ya da bu siparişler 5-10 sene sonra 100binli seviyelere ulaştığında tahmini database performansını .... ?

    Relational DB kullanıyorsanız kuallarına uymalısınız.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    Önay hocam, işte yine aynı yol üzerinden gidilmeyecek mi? datada olmayan bir şey(ayakabı) arattığında sonuç çıkmayacak herhangi bir hata söz konusu olmuyor denedim vallahi :D performans konusuna gelince, 100 bin vs bilmiyom ama bize hoca bu şekilde en verimli hali olduğunu söylemişti :D ve hocam şurası :

                using (ETradeContext context = new ETradeContext())
                {
                    //Çok fazla verimiz olduğu zaman bu her zaman daha performanslıdır. Çünkü sadece ihtiyacımız olan datayı almış oluyoruz...
                    return context.Products.Where(p => p.Name.Contains(key)).ToList();
    
                }

    burada işlem bittiği gibi sonlandırılmıyor mu yukarıda? yani veriyi ararken mi kasma yapar ? daha çok yolum var biliyorum da zamanla oturur inş :D

    24 Ekim 2019 Perşembe 11:19
  • Hocanız öyle dememiştir ya da başka bişeyi kastetmiştir ya da yanlış anlamışsınız. EF sadece sorgu yazmdan veri setleri üzerinde işlem yapmayı, crud yapmayı kolaylaştıran bişeydir. Veri tabanı tabloları hatalı tasarlanmışsa EF in bir katkısı/götürüsü olmaz. Yukarıdaki sorun tablo mimarisinden başlıyor, daha EF e gelmeden yani.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    24 Ekim 2019 Perşembe 11:43
    Moderatör