Sono un po 'novizio su .NET, e mi chiedevo come funziona linq, dal momento che puoi inserire molte query di linq, una dopo l'altra, ma nessuna di esse viene realmente eseguita fino a quando non vengono utilizzate per trasferire informazioni o convertite in elenco, ecc.
Esistono due modi importanti per ottenere una query linq, utilizzando IQueryable<T>
, che applica i filtri Where direttamente a Sql e IEnumerable che ottiene tutti i record e quindi li utilizza in memoria. Tuttavia, diamo un'occhiata a questo codice:Convertire una query Iqeryable su linq IEnumerable <T> annulla il modo ottimizzato per lavorare su linq?
//Linq dynamic library
IQueryable<Table> myResult = db.Categories
.Where(a => a.Name.Contains(StringName))
.OrderBy("Name")
.Skip(0)
.Take(10);
if (myResult != null)
{
return myResult.AsEnumerable();
}
else
{ return null; }
Nonostante i lavori sto utilizzando libreria dinamica Linq, il risultato diretto da questa query è essere get on IQueryable<T>
, se la query viene finalmente restituito come IEnumerable
, è il la query viene realmente filtrata in SQL? o è in memoria?
Il modo migliore per rispondere è guardare la proprietà 'Log' del contesto dati e vedere di persona. Sperimenta diverse varianti sulla tua query e osserva come influisce su ciò che è * effettivamente * eseguito. – Servy
Mi dispiace, come posso controllare il registro? –
Bene, questa è probabilmente una buona domanda per Google o la documentazione MSDN per quella proprietà di quel tipo; se la memoria serve c'è un buon esempio lì. – Servy