Drugi savet koji imam da ti dam je da ne preterujes mnogo

Trebalo bi da gledas kako da minimizujes broj upita u bazu, to je nesto sto mnogo ljudi zaboravi koristeci LINQ. Gornji kod, i moj i tvoj, ce izazvaati vise upita u bazu u zavisnosti od toga koje grupisanje se koristi. Mnogo bolja opcija bi ti bila (posto ionako skidas sve aktivne tikete), da ih sve ucitas u listu (resolvujes iz Linq2SQL/EF u cisti Linq) i da onda manipulises u lokalnoj memoriji. Ovaj kod bi onda bio:
Code (csharp):
var queryX = from a in baza_kon.Tickets
where a.Aktivan == 1
select a;
Expression<Func<Ticket, bool>> statusFilter = a => true;
if (!String.IsNullOrEmpty(status)) statusFilter = a => a.StatusTiketa.NazivStatusa == status;
var listX = queryX.Where(statusFilter).ToList();
listX.Dump();
ViewBag.grupisi = "0";
Func<Ticket, int> groupFilter = a => a.Id_tiket;
if (!String.IsNullOrEmpty(Grupisi))
{
ViewBag.grupisi = "1";
if (Grupisi == "ms.NazivGrada") groupFilter = a => a.Id_mesto;
if (Grupisi == "vr.NazivVrsteRada") groupFilter = a => a.Id_vrste_rada;
}
var keyEmplist = listX.GroupBy(groupFilter).OrderBy(a => a.Key);
Primeti par razlika:
- uveli smo listX, on vise nije IQueryable<Ticket> vec List<Ticket> zbog ToList()
- kad pozovemo to ToList(), Linq query se izvrsi na DB serveru i dobijamo podatke u memoriji
- posto vise Linq2SQL/EF ne mora da prevodi query u SQL, nema potrebe ni da koristimo Expression<Func<>> delegat, dovoljno je da koristimo Func<> jer ce se delegat izvrsaavti u lokalnoj memoriji nad lokalnim podacima.
- posto je foreign key isti u tickets i u parent objektima, vrse ne radimo grouping po parent objektu da bi izbegli call-back u bazu
- rezultat sada vise nije IOrderedQueryable, vec IOrderedEnumerable, ali sa funkcionalnog stanovista oni su identicni za tvoju upotrebu:
PS: Otvorio sam jednu vrednost u jednom polju, cisto da vidis da "kolona" u stvari nije jednostavan tip, vec drugi objekat.
[Ovu poruku je menjao mmix dana 26.12.2014. u 23:46 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić