#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)
.
Надеюсь, это поможет