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

相關問題