我有一个带有左联接的查询:

   var query = (from v in context.Vehicles

                //left join vehicleAttributes
                join va in context.VehicleAttributes on v.VehicleId equals va.VehicleId into vAttributes
                from vehicleAttributes in vAttributes.DefaultIfEmpty()

                where v.FleetId == fleetId

                select new { v, vehicleAttributes });


现在我需要对其进行分页。

这有效但是得到所有行,比我实际需要的多得多

query.ToList().Select(x => x.v).Distinct().Skip(10 * (page - 1)).Take(10).ToList();


这是我尝试的方法,但是现在我没有共同的价值观

query.Select(x => x.v).Distinct().ToList().Skip(10 * (page - 1)).Take(10).ToList();


有任何想法吗?

谢谢

最佳答案

ToList()触发对数据库的调用,因此仅在应用“跳过并接受”之后才需要执行此操作。您还需要一个OrderBy子句。

您应该能够执行以下操作:

var data = (from v in context.Vehicles
         join va in context.VehicleAttributes on v.VehicleId equals va.VehicleId into vAttributes
         from vehicleAttributes in vAttributes.DefaultIfEmpty()
         where v.FleetId == fleetId
         select new { v, vehicleAttributes })
         .OrderBy(p => p.v.FleetId)
         .Skip(10 * (page - 1))
         .Take(10)
         .ToList();

09-25 20:27