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 的所有权。
我遇到过这个问题
类型名称 '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 的所有权。