我想从一个名为Visitor的表中获取所有记录,而我又有一个名为booking_visitor的表
我的访客表
访问者
VisitorId 访客名称 电子邮件 电话 图片
Booking_visitor
BookingId F.k VisitorId F.k
我想从visitor表中获取所有记录,并基于Booking_visitor表中存在的每个id来获取每个具有VisitorId值的记录
如果 对于第一个记录,VistorId为1,而在Booking_visitor表中,该ID为3次,对于visitorid = 1,它应该在该记录下显示3条记录
我已经按照我的逻辑进行了尝试,但似乎无法获得正确的结果,可能是我的控制器代码错误或我的剃刀视图错误
这是我尝试过的
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>
}
}
我想要第一个访问者的分层结果,然后有任何结果显示在第一个访问者下面
答案 0 :(得分:2)
进行第二次查询的次数与访问者的次数相当昂贵。
我要做的就是获取所有访问者(就像您所做的一样),然后获取所有Bookingvw(带有 bv.VisitorId
信息),但不包含 v.VisitorId = {vs.VisitorId}
子句强>。所以有2个查询-2个列表。
然后,在cshtml中而不是 (IEnumerable<Bookingvw>)ViewBag.VisitorsAmount
中,可以使用以下 (IEnumerable<Bookingvw>)ViewBag.VisitorsAmount.Where(x => x.VisitorId == item.VisitorId)
。
希望这会有所帮助