Error: The type name 'X' does not exist in the type 'Y'

Error: The type name 'X' does not exist in the type 'Y'

我遇到过这个问题

类型名称 'RoomStayVmNew' 不存在于类型 'HotelVmNew.HotelRoomVmNew'

但我是我的视图模型,

public class HotelVmNew: IMapFrom<Domain.Entities.Hotel> 
{
    public IEnumerable<HotelRoomVmNew> Rooms { get; set; } = new List<HotelRoomVmNew>();
}

public class HotelRoomVmNew: IMapFrom<Domain.Entities.HotelRoom> 
{
    public IEnumerable<RoomStayVmNew> Stays { get; set; } = new List<RoomStayVmNew>(); 
}

public class RoomStayVmNew: IMapFrom<Domain.Entities.RoomStay> 
{
    public IEnumerable<RoomStayFacilityVm> Facilities { get; set; } = new List<RoomStayFacilityVm>();
}
var hotel = await _context.Hotels
  .Where(i => i.Code == request.Code)
  .Select(i => new HotelVmNew {
    Code = i.Code,
      Rooms = i.Rooms.Select(i => new HotelVmNew.HotelRoomVmNew {
        Id = i.Id,
          Stays = i.Stays.Select(x => new HotelVmNew.HotelRoomVmNew.RoomStayVmNew {}),

      })
  })

当我 select HotelRoomVmNew 我得到以下错误:

The type name 'RoomStayVmNew' does not exist in the type 'HotelVmNew.HotelRoomVmNew'.

为什么会出现这个错误?

 new HotelVmNew.HotelRoomVmNew.RoomStayVmNew {}

应该是

new RoomStayVmNew {}

你只需要这样做,前提是你要选择房间停留,因为你的 class 定义已经通过初始化器初始化了一个新的构造列表,尽管我猜你刚刚截断了每个 Stay 实例的初始化。

这条语句:

new HotelVmNew.HotelRoomVmNew.RoomStayVmNew {}

表示期望 HotelRoomVmNew 的 定义 存在于 HotelVmNew 中,而 RoomStayVmNew 的定义存在于 HotelRoomVmNew 中。

例如:

public class HotelVmNew: IMapFrom<Domain.Entities.Hotel> 
{
    public IEnumerable<HotelRoomVmNew> Rooms { get; set; } = new List<HotelRoomVmNew>();

    public class HotelRoomVmNew: IMapFrom<Domain.Entities.HotelRoom> 
    {
        public IEnumerable<RoomStayVmNew> Stays { get; set; } = new List<RoomStayVmNew>(); 


        public class RoomStayVmNew: IMapFrom<Domain.Entities.RoomStay> 
        {
            public IEnumerable<RoomStayFacilityVm> Facilities { get; set; } = new List<RoomStayFacilityVm>();
        }
    }
}

请注意,class 是在其父级范围内定义的。您当然可以这样设置,但它会不断地要求您完全扩展 class 名称以获取相关的 class 定义。我想不出有什么好的理由这样做,除非你真的想弄清楚 classes 的所有权。