Junior — Middle
Explain the differences between the IQueryable and IEnumerable interfaces in the context of data operations.
sobes.tech AI
Answer from AI
IEnumerable and IQueryable are interfaces in C# used for working with collections and queries, but they have different purposes and behaviors:
-
IEnumerable<T> — represents a collection that can be iterated over. Data queries are executed in-memory. Suitable for working with local collections, such as lists or arrays.
-
IQueryable<T> — extends
IEnumerable<T>and allows building queries that can be translated into expressions, such as SQL queries. Queries are executed on the data source side (e.g., a database), which allows for query optimization and reducing the amount of data transferred.
Key differences:
| Feature | IEnumerable<T> | IQueryable<T> |
|---|---|---|
| Execution location | In memory (client-side) | On the server (data source) |
| Data type | Any collections | Data sources supporting LINQ (e.g., Entity Framework) |
| Support for deferred execution | Yes | Yes |
| Usage | Iterating over elements | Building and executing queries |
Example:
IEnumerable<Product> products = GetProducts(); // local collection
var cheapProducts = products.Where(p => p.Price < 100); // filtering in memory
IQueryable<Product> queryableProducts = dbContext.Products; // query to DB
var cheapProductsFromDb = queryableProducts.Where(p => p.Price < 100); // SQL query to DB