TOP 60 probably won't do what you think it does here
var query = from car in Repository.Data
from wheel in car.Wheels
select new { car.Id, car.Make, wheel.Number, wheel.Size };
var data = query
.Take(60)
.GroupBy(a => a.Id, (key, values) => new Allocation
{
Make = values.First().Make,
Wheels = values.Select(a => new Wheel
{
Number = a.Number,
Size = a.Size,
})
.ToArray(),
})
.ToArray();
Update: to load exactly 60 root entities and initialize more than one collection
var cardata = Repository.Data.Select(car => new { car.Id, car.Make }).Take(60).ToList();
foreach(var c in cardata)
{
var carId = c.Id;
a.Wheels = aRepository.Data.Where(c => c.Id == carId).SelectMany(car => car.Wheels).Select(w => new Wheel { Number = w.Number, Size = w.Size}).ToFuture();
a.Foos = aRepository.Data.Where(c => c.Id == carId).SelectMany(car => car.Foos).Select(f => new Foo { Bar = f.Bar }).ToFuture();
}
cardata[0].Wheels.Any(); // execute the futures
return cardata;