Ho una tabella di 200.000 record dove sto ricevendo solo i primi 10 utilizzando .Take()
ma ci vogliono circa 10 secondi per ottenere i dati.Linq alle entità è molto lento utilizzando il metodo .Take()
La mia domanda è: il metodo .Take()
recupera tutti i dati dal database e filtra i primi 10 sul lato client?
Ecco il mio codice:
mylist = (from mytable in db.spdata().OrderByDescending(f => f.Weight)
group feed by mytable.id into g
select g.FirstOrDefault()).Take(10).ToList();
spdata()
è un Importa funzione dalla stored procedure.
Grazie
Se siete curiosi di quello che viene eseguito sul database si dovrebbe agganciare un profiler fino al tuo DB e controlla i log, questo è il modo migliore per scoprirlo. – Chris
Se spdata() restituisce i 200.000 allora sì, lo farà sul lato client. –
Oltre al metodo di Chris, è anche possibile provare Linqpad e passare alla vista SQL dopo aver scritto la query per visualizzare l'SQL generato o inserire un punto di interruzione (con questo metodo http://stackoverflow.com/questions/1412863/how -do-i-view-the-sql-generated-by-the-entity-framework) per vedere cosa viene generato mentre il programma viene eseguito. –