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();
// Τα δεδομένα φορτώνονται στη μνήμη, και οι επόμενες λειτουργίες θα εκτελεστούν τοπικά