如何从一个表中获取所有记录,并基于每个记录获取与mvc 5中的第一个表记录相关联的所有记录

时间:2019-04-13 05:10:10

标签: c# sql-server asp.net-mvc tsql petapoco

我想从一个名为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>
            }

        }

我想要第一个访问者的分层结果,然后有任何结果显示在第一个访问者下面

1 个答案:

答案 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)

希望这会有所帮助