How to Avoid Loading an Entire Table into Memory
Need only active customers?
Filter them in the database.
Instead of:
var customers = await context.Customers.ToListAsync();
var activeCustomers = customers
.Where(x => x.IsActive)
.ToList();Prefer:
var activeCustomers = await context.Customers
.Where(x => x.IsActive)
.ToListAsync();The difference is where filtering happens.

The first approach:
- Loads every row
- Transfers every row
- Stores every row in memory
- Filters afterward
The second approach lets the database return the rows you requested.
If you need 100 customers from a table containing 1,000,000 rows, filtering before ToListAsync() tends to matter.