微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我将如何创建一个包含来自 selectmany 方法的父和子数据的视图模型

如何解决我将如何创建一个包含来自 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;
    }

}

规格:

  1. Passengerviewmodel 应该只包含一条记录
  2. 基于作为输入的日期字段,查询找到所有登记的乘客并创建视图模型。
  3. 输出应该是这样的:

日期: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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?