Стоит отметить, что два других решения здесь извлекают данные через SQL, а затем переупорядочивают вещи в памяти, что очень расточительно с точки зрения производительности как во время запроса, так и после обработки. Это решение позволяет получить все за один раз с помощью SQL, без лишних шагов в памяти.
Это можно сделать, как описано во втором подходе здесь:
Как заказать дочерние коллекции сущностей в EF
Как:
db.VendorProducts.Select(p =>
new { Product = p, S = p.Schedules.OrderBy(s => s.From) })
.FirstOrDefault(q => q.Product.Id == id).Product
Таким образом, вместо оператора Include вы вызываете связанные данные в анонимном объекте вместе с исходными корневыми данными, которые вы собирались получить, упорядочиваете их в этом подзапросе и, наконец, возвращаете корневые данные. Порядок остается без изменений. Скручено но работает.
Чтобы придерживаться вашего исходного кода:
db.Weeks.Select(w => new { W = w, O = w.Orders.OrderBy(o => o.SchedulingOrder) })
.OrderBy(q => q.W.StartDate).Select(q => q.W);