如何解决我将如何创建一个包含来自 selectmany 方法的父和子数据的视图模型
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()
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。