1

从多个表中获取数据时,我非常困惑。我在我的项目中使用MVVM和数据库第一种方法。实体框架,从多个表中获取数据并选择要显示的列

My Tables

我有三个表许多一对多的关系:客房,ApartmentRoom和公寓。

RoomController

public class ApartmentController : Controller 
{ 
    private readonly IApartmentRepository _apartmentRepository; 

    public ApartmentController(IApartmentRepository apartmentRepository) 
    { 
     _apartmentRepository = apartmentRepository; 
    } 

    //...codes 

    [HttpGet] 
    public ActionResult List() 
    { 
     var apartmentList = _apartmentRepository.GetAll().ToList(); 
     return View(apartmentList); 
    } 

    //...codes 
} 

List.cshtml

<div class="dataTables_wrapper"> 
<table class="table table-bordered table-striped" id="dataTable"> 
    <thead> 
     <tr> 
      <th>Id</th> 
      <th>Door Number</th> 
      <th>Floor Number</th> 
      <th>Capacity</th> 
      <th>Fullness</th> 
      <th>Apartment Name</th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model.ToList()) 
     { 
      <tr> 
       <td>@item.Id</td> 
       <td>@item.DoorNumber</td> 
       <td>@item.FloorNumber</td> 
       <td>@item.Capacity</td> 
       <td>@item.Fullness</td> 
       <td>@item.ApartmentRoom.Where(x => x.RoomID == item.Id).Select(x => x.Apartment.ApartmentName)</td> 
       <td> 
        @Html.ActionLink("Düzenle", "Edit", new { id = item.Id }) 
        @Html.ActionLink("Sil", "Delete", new { id = item.Id }) 
       </td> 
      </tr> 
     } 
    </tbody> 
</table> 

我试图让我想在此表以显示与基于方法的语法领域,但我无法显示房间所属公寓的名称。

结果

Result Image

在视图中,我想列出Room表和ApartmentApartmentName领域的各个领域。

+0

您可能需要在dbcontext配置中禁用延迟加载或使用Include方法获取子表记录。 –

回答

2
<td>@item.ApartmentRoom.Where(x => x.RoomID == item.Id).Select(x => x.Apartment.ApartmentName)</td> 

^^这只是调用一个IEnumerable的ToString,这就是为什么你要在你认为陌生的输出。您想在DbSet<Apartment>上使用Include方法加载任何相关实体,然后使用First来获取相关实体。包含采用lambda表达式(context.Apartments.Include(a => a.Rooms))的超载位于命名空间System.Data.Entity中。

更多类似:

<td>@item.ApartmentRoom.First(x => x.RoomID == item.Id).ApartmentName</td> 
+0

谢谢你的帮助先生。你救了我的一天:) – Utku

1
<td>@item.ApartmentRoom.Where(x => x.RoomID == item.Id).Select(x => x.Apartment.ApartmentName).FirstOrDefault()</td> 

是你所追求的,所以你得到实际的项目,而不是查询,但我相信你的逻辑有点破。

+0

你的代码也适合我。谢谢你的帮助。 – Utku

相关问题