C#嵌套Linq分组依据



我想实现这个输出,每个客户一个VIEWMODEL INSTANCE

CUSTOMER
TUI

Total字段必须位于ReservationVM的级别(除非您想要一个名为Total的容器,但您不想要(。此外,您还应该创建另一个类,称之为VesselReservationVm。你可以做以下事情:

类别:

public class Reservation {
public string Date { get; set; }
public string Customer { get; set; }
public string Vessel { get; set; }
public int TotalPersons { get; set; }
}
public class ReservationVM {
public string Customer { get; set; }
public List<Reservation> Reservations { get; set; }
public List<VesselReservationVM> VesselReservations { get; set; }
public int Total { get; set; }
}

public class VesselReservationVM {
public string Vessel { get; set; }
public int Passengers { get; set; }
}

方法:

public IEnumerable<ReservationVM> GetCustomersReservations() {
var result = dbContext.Reservations
.Where(x => x.Date == "2021-05-01")
.AsEnumerable()
.GroupBy(x => x.Customer)
.Select(x => new ReservationVM {
Customer = x.Key,
Reservations = x.ToList(),
VesselReservations = GetCustomerVessels(x.ToList()),
Total = x.Select(r => r.TotalPersons).Sum()
})
.OrderBy(x => x.Customer);
return result;
}
public List<VesselReservationVM>  GetCustomerVessels( 
List<Reservation> reservations) {
var result = reservations
.GroupBy(r => r.Vessel)
.Select(g => new VesselReservationVM
{
Vessel = g.Key,
Passengers = g.Select(r => r.TotalPersons).Sum(),
})
.ToList();
return result;
}

最新更新