как получить все записи из одной таблицы и на основе этого каждая запись извлекает все записи, связанные с первой таблицей записей в mvc 5

#c# #sql-server #asp.net-mvc #tsql #petapoco

#c# #sql-сервер #asp.net-mvc #tsql #petapoco

Вопрос:

Я хочу получить все записи из одной таблицы с именем Visitor, и у меня есть другая таблица с именем booking_visitor

моя таблица посетителей

Посетитель

visitorID VisitorName Электронная почта Телефон Фото

Booking_visitor

BookingID F.k visitorID F.k

я хочу получить все записи из таблицы посетителей и на основе этого каждый идентификатор, присутствующий в таблице Booking_visitor, извлекает каждую запись, имеющую значение visitorID

если VistorId равен 1 для первой записи, и этот идентификатор появляется три раза в таблице Booking_visitor, то для visitorid = 1 он должен отображать три записи ниже этой записи

я пытался по своей логике, но, похоже, я не получаю должного результата, возможно, мой код контроллера неверен или мое представление razor неверно

Вот это то, что я пробовал

    var visitor= db.Fetch<Visitor>("Select VisitorId,VisitorName from Visitors");

        foreach (var vs in Visitors)
        {
            ViewBag.VisitorsAmount= db.Query<Bookingvw>("select b.BookingId,bd.BookingDetailId,v.VisitorId,v.VisitorName,bd.CheckIn,bd.CheckOut from Booking_visitor bv "  
           "inner join Booking b on b.BookingId= bv.BookingId"  
           "inner join Visitors v on v.VisitorId= bv.VisitorId"  
           $"inner join BookingDetails bd on bd.BookingId= b.BookingId where v.VisitorId= {vs.VisitorId} ");
            "group by b.BookingId, bd.BookingDetailId, v.VisitorId, v.VisitorName, bd.CheckIn, bd.CheckOut ");*/

        }
        return View(visitor);


 @model IEnumerable<Visitors>
  @foreach (var item in Model)
        {
            <tr>
                <td>@item.VisitorName</td>
            </tr>

        }
            <tr>
                @{
                    var vsamt = (IEnumerable<Bookingvw>)ViewBag.VisitorsAmount;
                }
                <th>
                    Booking Id
                </th>
                <th>
                    Check In
                </th>
            </tr>


            @foreach (var item2 in vsamt )
            {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item2.BookinId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item2.CheckIn)
                </td>
            </tr>
            }

        }
  

я хочу получить иерархический результат для первого посетителя, есть ли какой-либо результат, а затем показать этот результат ниже первого посетителя

Комментарии:

1. Я предлагаю вам изучить и изучить, прежде чем писать код. У вас слишком много проблем в вашем коде. Что такое Visitors ? Вы продолжаете цикл и настройку VisitorsAmount , если вы продолжаете устанавливать другое значение для переменной в цикле, какое значение она будет иметь? Мы не знаем, получаете ли вы какие-либо результаты из БД или нет … слишком много проблем, чтобы помочь вам.

2. Вы можете напрямую использовать linq, чтобы получить свой Booking_visitor var booking = db.Booking_visitor.Include(x=>x.Visitor); лайк таким образом, вы можете получить доступ ко всем посетителям бронирования, также вы получаете всех своих посетителей с его бронированием, например var visitors= db.Visitor.Include(x=>x.Booking_visitor); , в качестве модели EF im, которую вы предоставляете, тогда вы можете получить таким образом.

Ответ №1:

Довольно дорого выполнять второй запрос столько раз, сколько считают посетители.
Что бы я хотел сделать, так это получить всех посетителей (как вы сделали), а затем получить все Bookingvw (несущие bv.VisitorId информацию), но без предложения v.VisitorId = {vs.VisitorId} . Итак, 2 запроса — 2 списка.
Затем в cshtml вместо (IEnumerable<Bookingvw>)ViewBag.VisitorsAmount , вы могли бы использовать следующее (IEnumerable<Bookingvw>)ViewBag.VisitorsAmount.Where(x => x.VisitorId == item.VisitorId) .

Надеюсь, это поможет