Sobes.tech
Junior — Middle

Πώς διακρίνουμε το IEnumerable από το IQueryable και σε ποιες περιπτώσεις χρησιμοποιούμε το καθένα;

sobes.tech AI

Απάντηση από AI

IEnumerable και IQueryable είναι διεπαφές για εργασία με συλλογές, αλλά με διαφορετική συμπεριφορά και σκοπό:

  • IEnumerable<T> — χρησιμοποιείται για την επανάληψη συλλογών στη μνήμη. Τα ερωτήματα δεδομένων εκτελούνται αμέσως, και όλες οι λειτουργίες LINQ επεξεργάζονται στην πλευρά του πελάτη (στη μνήμη).

  • IQueryable<T> — επεκτείνει το IEnumerable και επιτρέπει τη δημιουργία ερωτημάτων που μπορούν να μετατραπούν σε εκφράσεις, π.χ. ερωτήματα SQL. Η εκτέλεση του ερωτήματος αναβάλλεται μέχρι τη στιγμή της επανάληψης (lazy execution), και οι λειτουργίες εκτελούνται στην πηγή δεδομένων (π.χ. βάση δεδομένων).

Πότε να το χρησιμοποιήσετε:

  • IEnumerable — αν τα δεδομένα έχουν ήδη φορτωθεί στη μνήμη ή εργάζεστε με τοπικές συλλογές.
  • IQueryable — αν χρειάζεται να δημιουργήσετε ένα ερώτημα σε μια απομακρυσμένη πηγή (ΒΔ) και να βελτιστοποιήσετε την επιλογή, πραγματοποιώντας φιλτράρισμα και ταξινόμηση στον διακομιστή.

Παράδειγμα:

IQueryable<User> usersQuery = dbContext.Users.Where(u => u.Age > 18);
// Το ερώτημα στη βάση δεδομένων θα διαμορφωθεί και θα εκτελεστεί κατά την επανάληψη του usersQuery

IEnumerable<User> usersList = usersQuery.ToList();
// Τα δεδομένα φορτώνονται στη μνήμη, και οι επόμενες λειτουργίες θα εκτελεστούν τοπικά