Junior — Middle
Come distinguere IEnumerable da IQueryable e in quali casi usarli?
sobes.tech AI
Risposta dell'AI
IEnumerable e IQueryable sono interfacce per lavorare con le collezioni, ma con comportamenti e scopi diversi:
-
IEnumerable<T> — viene usato per attraversare le collezioni in memoria. Le query sui dati vengono eseguite immediatamente, e tutte le operazioni LINQ vengono elaborate sul lato client (in memoria).
-
IQueryable<T> — estende IEnumerable e permette di costruire query che possono essere trasformate in espressioni, ad esempio query SQL. L'esecuzione della query viene posticipata fino al momento dell'attraversamento (esecuzione pigra), e le operazioni vengono eseguite sul lato della fonte di dati (ad esempio, database).
Quando usarlo:
IEnumerable— se i dati sono già caricati in memoria o si lavora con collezioni locali.IQueryable— se si deve costruire una query verso una fonte remota (DB) e ottimizzare la selezione, eseguendo filtraggio e ordinamento sul server.
Esempio:
IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// La query al database verrà formata ed eseguita durante l'attraversamento di usersQuery
IEnumerable<User> usersList = usersQuery.ToList();
// I dati vengono caricati in memoria, e le operazioni successive verranno eseguite localmente