Требуется первая «ненужная» поездка - вы сделали новый запрос, и база данных могла измениться за это время. Если вместо этого вы использовали переменную сотрудников (в которой вы сохранили результат запроса), вам не нужно совершать поездку в базу данных.
Второй необходим, потому что вы просите его получить Заказы для каждого Сотрудника. При отложенной загрузке и отсутствии функции Include () он не считывает заказы, пока вы не попросите об этом с помощью emp.Orders.Count ().
Помните, что до тех пор, пока вы не начнете выполнять итерацию по запросу (или вызвать какой-либо метод, который требует его повторения), LINQ to EF ничего не делает. Если вы сохраните этот запрос в переменной, а затем вызовете .Count () для него, произойдет возврат в оба конца. Если вы воспользуетесь тем же запросом и начнете перечислять его, произойдет еще одна поездка туда и обратно. Если у сущностей в этом запросе есть отношения, и ленивая загрузка включена каждый раз, когда вы обращаетесь к ней, будет еще одна поездка туда и обратно.
Ваш второй пример показывает, как сделать это правильно, если вы заранее знаете, что хотите получить ордера, это нетерпеливая загрузка . Обратите внимание, что вы не возвращаетесь к контексту, чтобы снова спросить сотрудников, вы снова используете уже загруженный.