1

複数のテーブルからデータを取得する際に非常に混乱します。私は私のプロジェクトでMVVMとデータベースの最初のアプローチを使用しています。Entity Framework、複数のテーブルからデータを取得し、表示する列を選択する

テーブル

My Tables

Iは、多対多の関係を持つ3つのテーブルがあります。ルーム、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テーブルとApartmentテーブルのApartmentNameフィールドのすべてのフィールドを一覧表示します。それ^^

+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を使用して問題の関連エンティティを取得したいとします。ラムダ式(context.Apartments.Include(a => a.Rooms))を含むIncludeのオーバーロードは、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

関連する問題