Entity Framework is quite clever as to how it translates LINQ queries to query statements, as in it optimizes the query for you.
Doing
context.Employess.Where(x => x.Age >= 18).Skip(20).Take(10);
Will not load all employees into memory, filter them by age, skip 20 and then return 10. It will create an SQL query that only returns the 10 employees you actually want. That LINQ query will be translated to something like this:
SELECT id, age, col3, col4...
FROM employees
WHERE age >= 18
ORDER BY id
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY;
That SQL Query will only return 10 rows, after skipping 20. Also note that it will only execute the query once you act on the Enumerable, this is because LINQ uses Deferred Execution
Edit: The SQL statement I supplied will only work on SQL Server 2012 und upwards, as OFFSET
and FETCH NEXT
were only introduced then