c# - 我将如何创建一个包含来自 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;
}
}
规格:
- PassengerViewModel 应该只包含一条记录
- 基于作为输入的日期字段,查询查找所有登记的乘客并创建视图模型。
- 输出应该是这样的:
日期:2021-05-01
乘客:史密斯琼斯布朗
我不知道这是否可能,也许我要求太多了!
解决方案
首先你必须修复乘客类
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()
};
推荐阅读
- excel - 在命名范围内的相应行中设置单元格值
- python - 如何检查字典列表的值是否在一定范围内?
- swift - Swift - 水平 UIPickerView
- ios - 使用变换时,CAShapeLayer 笔触有时会落在同一路径的填充区域之外
- yaml - 将 oneOf 与属性对象中的共享元素一起使用
- c# - 如何创建在 aspnet core 3 上返回错误请求的自定义 api 参数验证属性?
- python - 如何在 Dash 中获取当前路径?
- javascript - chrome对大于10的数组使用什么排序方法?
- arrays - MongoDB 聚合、数组和逻辑操作
- python - 一个类的构造函数可以在 Python 中返回另一个类吗?