En iyi yanıtlayıcılar
Çoklu Parametreli Sorgulama

Soru
-
Merhaba arkadaşlar bir şey öğrenmek istiyorum. Mesela bir sorgulama yaptırmak istiyorum. Bu sorgulamanın birden fazla parametresi var. Örneğin Sahibinden sitesinde il ilçe satılık kiralık v.s birden fazla parametre seçiyoruz daha sonra sorguluyoruz.
Bunu Linq ile yapmak istersem bunu nasıl yapabilirim. Veya başka kolay bir yolu var mı?
Yanıtlar
-
Databaseinin ne oldugunu soylememissin :( Linq diyorsun, muhtemelen SQL serisi bir database (olmayabilir tabii ama NoSQL ise Linq destegi olsa da kullanmak gereksiz olabilir). Sahibinden gibi yerler, bu is icin SQL serisi database kullanmiyor.
Linq ile temel olarak iki yontem var:
1) where ( x != null || x == aranan ) && ( y != null || y == aranan2 )...
2) if ile bir dizi where kullanmak.
Where( kosul & kosul & ... ) ise olmaz.
1.ye ornek (LinqToSQL):
void Main() { string country = ""; //"Brazil" string city = ""; //"Sao Paulo" DateTime? orderDate = null; //new DateTime(1996,8,28); var data = db.Orders .Where (c => string.IsNullOrEmpty(country) || c.ShipCountry.StartsWith(country) ) .Where (c => string.IsNullOrEmpty(city) || c.ShipCity.StartsWith(city) ) .Where (c => orderDate == null || c.OrderDate == orderDate); }
2. Yol ile IQueryable kullanabilir ve sartlarini if () bloklariyla ekleyebilirsin.
void Main() { string country = ""; //"Brazil" string city = ""; //"Sao Paulo" DateTime? orderDate = null;//new DateTime(1996,8,28); var data = Orders.AsQueryable(); if (!string.IsNullOrEmpty(country)) { data = data.Where(c => c.ShipCountry.StartsWith(country)); } if (!string.IsNullOrEmpty(city)) { data = data.Where(c => c.ShipCity.StartsWith(city)); } if (orderDate != null) { data = data.Where(c => c.OrderDate == orderDate); } }
Not: 1.Yontem Linq To SQL ile calisir. 2. ise hem Linq To SQL hem de Linq To EF ile calisir.
- Düzenleyen CetinBasoz 11 Ocak 2016 Pazartesi 10:50
- Yanıt Olarak İşaretleyen Serkan Canseven 11 Ocak 2016 Pazartesi 13:56
Tüm Yanıtlar
-
-
-
-
-
Databaseinin ne oldugunu soylememissin :( Linq diyorsun, muhtemelen SQL serisi bir database (olmayabilir tabii ama NoSQL ise Linq destegi olsa da kullanmak gereksiz olabilir). Sahibinden gibi yerler, bu is icin SQL serisi database kullanmiyor.
Linq ile temel olarak iki yontem var:
1) where ( x != null || x == aranan ) && ( y != null || y == aranan2 )...
2) if ile bir dizi where kullanmak.
Where( kosul & kosul & ... ) ise olmaz.
1.ye ornek (LinqToSQL):
void Main() { string country = ""; //"Brazil" string city = ""; //"Sao Paulo" DateTime? orderDate = null; //new DateTime(1996,8,28); var data = db.Orders .Where (c => string.IsNullOrEmpty(country) || c.ShipCountry.StartsWith(country) ) .Where (c => string.IsNullOrEmpty(city) || c.ShipCity.StartsWith(city) ) .Where (c => orderDate == null || c.OrderDate == orderDate); }
2. Yol ile IQueryable kullanabilir ve sartlarini if () bloklariyla ekleyebilirsin.
void Main() { string country = ""; //"Brazil" string city = ""; //"Sao Paulo" DateTime? orderDate = null;//new DateTime(1996,8,28); var data = Orders.AsQueryable(); if (!string.IsNullOrEmpty(country)) { data = data.Where(c => c.ShipCountry.StartsWith(country)); } if (!string.IsNullOrEmpty(city)) { data = data.Where(c => c.ShipCity.StartsWith(city)); } if (orderDate != null) { data = data.Where(c => c.OrderDate == orderDate); } }
Not: 1.Yontem Linq To SQL ile calisir. 2. ise hem Linq To SQL hem de Linq To EF ile calisir.
- Düzenleyen CetinBasoz 11 Ocak 2016 Pazartesi 10:50
- Yanıt Olarak İşaretleyen Serkan Canseven 11 Ocak 2016 Pazartesi 13:56
-
-
Buradaki performans düşünceni açar mısın?
@Çetin abinin 2. örneğindeki gibi yazdığında çıkan SQL sorgusundan daha performanslı bir SQL sorgusunu nasıl yazmayı düşünüyorsun da o sorgu daha performanslı oluyor? Varsa öyle bir sorgu Linq karşılığını düşünelim.
SQL bazında düşünürsek performans istiyorsan iki index atarsın, gerekirse sharding mantıklarına gidersin. Bu gibi okumalarda da isolation level'ı düşürmek işine gelebilir (phantom read vb. problemleri dert etmiyorsan). Veri büyüklüğüne göre @çetin abinin hatırlattığı NoSQL gibi çözümlerle hibrit yapılar kurabilirsin.
- Düzenleyen Cihan YakarMVP, Moderator 12 Ocak 2016 Salı 13:53
- Yanıt Olarak Öneren CetinBasoz 12 Ocak 2016 Salı 15:10
-
-
-