检索具有相同HotelID的数据

问题描述 投票:1回答:2

在我的SQL Server数据库中,有两个表:RoomHotelHotelIDRoom表中的外键。在Room餐桌上,有2间客房配有HotelID = 1

我的目标是尝试用HotelID方法检索GET,然后结果应显示酒店的信息和Room的信息在HotelID表中具有相同的Hotel

我从我的代码中得到的只显示了一个房间。它应该显示2个房间

{"item1":{"hotelID":1,"hotelName":"Dope Hotel","hotelAddress":"1234 Test St","hotelCity":"asdf","hotelState":"AB","hotelZip":"56452","hotelCountry":"USA","hotelPhone":"8081234567"},"item2":{"roomID":1,"roomName":"Ocean View","roomDescription":"This is room Description","hotelID":1}}

这是我的代码:

[HttpGet]
[Route("api/hotel/gethotel/{HotelID}")]
public IActionResult GetByHotelID(int HotelID, string[] roominfo)
{
        //check if the hotel ID is the same as the db hotelID
    var hotelinfo = _context.Hotels.FirstOrDefault(t => t.HotelID == HotelID);

    if (hotelinfo == null)
    {
        //if no item matches return id returning a http404 response
        return NotFound();
    }

    //return 200 with JSON response body, returning ObjectResult
    var rroominfo = _context.Rooms.FirstOrDefault(t => t.HotelID == HotelID);
    var hrinfo = (hotelinfo, rroominfo);

    if (rroominfo == null)
    {
        return new ObjectResult(hotelinfo);
    } 
    else
    {
        return new ObjectResult(hrinfo);
    }
}

我的问题是如何获得包含相同HotelID的结果的多个房间?

c# visual-studio asp.net-core
2个回答
3
投票

我觉得用

var rroominfo = _context.Rooms.FirstOrDefault(t => t.HotelID == HotelID);

导致你只有一个房间。它仅返回具有给定酒店ID的第一个房间。尝试使用

_context.Rooms.Where(t => t.HotelID == HotelID);

代替。


0
投票

我认为您可以使用Include()将房间装入酒店

var hotelinfo = _context.Hotels.Include(x => x.Rooms).FirstOrDefault(t => 
t.HotelID == HotelID);
© www.soinside.com 2019 - 2024. All rights reserved.