问题描述
public class Reservation {
public Guid ReservationId { get; set; }
public string Date { get; set; }
}
public class Passenger {
public int Id { get; set; }
public Guid ReservationId { get; set; }
public string Lastname { get; set; }
public bool IsCheckedIn { get; set; }
}
public class Passengerviewmodel {
public string Date { get; set; }
public IEnumerable<Passenger> Passengers { get; set; }
}
public class ManifestController : ControllerBase {
[HttpGet("date/{date}")]
public IQueryable<Passengerviewmodel> Get(string date) {
var passengers = context.Reservations
.Where(x => x.Date == date)
.SelectMany(p => p.Passengers.Select(x => new Passengerviewmodel {
Date = p.Date,Passengers = p.Passengers.Where(x => x.IsCheckedIn)
}));
return passengers;
}
}
规格:
日期:2021-05-01
乘客: 史密斯 琼斯 棕色
我不知道这是否可能,也许我要求太多了!
解决方法
首先你必须修复Passenger类
public class Passenger {
public int Id { get; set; }
public Guid ReservationId { get; set; }
public virtual Reservation Reservation { get; set; }
public string Lastname { get; set; }
public bool IsCheckedIn { get; set; }
}
我认为不可能查询它,因为您的视图模型 passangers 不可查询,只能查询 IEnumerable
public PassengerViewModel Get(string date)
{
return new PassangerVievModel {
Data=date,Passangers= context.Passengers
.Where(x => x.IsCheckedIn && x.Reservation.Date == date)
.ToList()
};
}
如果您删除 .ToList() Passangers 将是可查询的,但是您将遇到语法错误。你必须问你的老师什么应该是可查询的。但我认为这没有任何意义,因为您没有任何谓词。
或者,如果您只需要乘客姓名列表,则必须更改视图模型
public class PassengerViewModel {
public string Date { get; set; }
public IEnumerable<string> Passengers { get; set; }
}
和查询
return new PassangerVievModel {
Data=date,Passangers= context.Passengers
.Where(x => x.IsCheckedIn && x.Reservation.Date == date)
.Select(i=> i.Lastname)
.ToArray()
};