Sobes.tech
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