Soran
Siparişlerin içinde arama yapıp listeleme

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)
DtlTopanSiparisListesi.DataSource = sonuc;
{
var sonuc = db.ToptanSiparisler.Where(i => i.id == item.UstId).ToList();
DtlTopanSiparisListesi.DataBind();}
- Düzenleyen Potenza_Rzgr 18 Ekim 2019 Cuma 12:45
Tüm Yanıtlar
-
-
ürünün adı şapka terlik olduğu için yazıyor, ayrıca örnek bir tablo bu, yanlış olan nedir ?
- Düzenleyen Potenza_Rzgr 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ı tablosuId 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
- Düzenleyen Önay YALÇINERModerator 18 Ekim 2019 Cuma 14:59
- Yanıt Olarak Öneren canleveent 18 Ekim 2019 Cuma 16:21
-
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ı.
-
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; }
-
-
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ı malesefBen 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.
- Düzenleyen Einsatzgruppens 23 Ekim 2019 Çarşamba 19:36
-
(Ö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
- Düzenleyen Önay YALÇINERModerator 24 Ekim 2019 Perşembe 07:18
-
(Ö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.
-
(Ö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
-
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