我正在努力从我的数据库中获取一些数据
我的数据库设计是这样的:我有一个酒店有一个hotelchainid,一个有hotelid的建筑,一个有建筑物的地板和一个有地板的房间。
我正试图抓住数据库中某个酒店的所有房间
Databasehandler.cs方法:
public static List<Room> GetAllRoomsByHotel(string hotelname)
{
HotelDbContext context = new HotelDbContext();
var hotel = context.Hotels.Where(h => h.Name == hotelname).Single();
var buildings = context.Buildings.Where(b => b.Hotel.HotelID == hotel.HotelID).ToList();
var floors = context.Floors.Where(f => f.Building.BuildingID == buildings.BuildingID).ToList();
var rooms = context.Rooms.Where(r => r.Floor.FloorID == floors.FloorID).ToList();
return rooms;
}
我正在考虑将找到的对象添加到List并循环遍历该列表以获取id并在之后比较它们但我不知道如何实现它以及是否可行。
感谢您的时间!
答案 0 :(得分:1)
一旦您拥有了所有导航属性,就可以实现您想要的目标
context.Hotels.Where(h => h.Name == hotelname)
.SelectMany(h => h.Buildings)
.SelectMany(b => b.Floors)
.SelectMany(f => f.Rooms)
这将为您提供属于hotelname
指定的酒店的房间集合。
通常,尤其是使用SelectMany
,查询语法更容易......
from h in context.Hotels where h.Name == hotelName
from b in h.Buildings
from f in b.Floors
from r in f.Rooms
select new
{
Hotel = h.Name,
Building = b.Name,
Floor = f.Number,
Room = r.Number
}
...因为,如您所见,如果需要,可以更容易在最终结果中包含父数据。