I have recently had several situations where I need different data from the same table. One example is where I would loop through each "delivery driver" and generate a printable PDF file for each customer they are to deliver to.
In this situation, I pulled all customers and stored them into
List<Customer> AllCustomersList = customers.GetAllCustomers();
List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID);
There isn't an accurate number for amount of rows that if you pass it you should query the DB instead in in-memory
But the rule of thumb is, DB are designed to work with large amount of data and they have optimization "mechanisms" while in in-memory there aren't such things.
So you will need to benchmark it to see if the round-trip to DB is worth it for that amount of rows for each time it's important to you
"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil"