2017-11-16 8 views
0

オブジェクトのリストをコントローラからビューに渡そうとしています。 LINQを使用してデータベースから取得します。モデルコードは以下のとおりである:どのように私はASP.Net MVC5のLinqを使用してデータベースからデータを取得するコントローラからビューのオブジェクトのリストを渡すことができます

public class Department 
    { 

     [Key] 
     public int DepartmentId { get; set; } 

     [Required(ErrorMessage = "Enter Department Name")] 
     [DisplayName("Department Name")] 
     public string DepartmentName { get; set; } 
    } 

[コントローラコード:

@model List<PractiseMVC11_17_2017.Models.Department> 

@{ 
    ViewBag.Title = "ShowDepartments"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Show Departments</h2> 



     <div> 

    <table class="table table-bordered table-hover"> 
     <tbody> 

      @foreach (var department in Model) 
      { 

       <tr> 
        <td> 
         @department.DepartmentId 
        </td> 

        <td> 
         @department.DepartmentName 

        </td> 

       </tr> 

      } 

     </tbody> 



    </table> 


</div> 


} 

しかし、私はプロジェクトを実行すると、それは次のことを示しています

public ActionResult ShowDepartments() 
     { 

      var departmentList = db.Deapartment.Select(x => new 
      { 
       x.DepartmentId, 
       x.DepartmentName 

      }).ToList(); 


      return View(departmentList); 
     } 

コードの表示があります例外:

例外の詳細:System.InvalidOperationException:モデルアイテムがdictiに渡されましたonaryは型 'System.Collections.Generic.List 1[<>f__AnonymousType3 2 [System.Int32、System.String]]'ですが、この辞書には 'System.Collections.Generic.List`1というモデル項目が必要です[PractiseMVC11_17_2017.Models。部門]'。

答えて

0

あなたのビューは、クラスオブジェクトDepartmentのコレクションに強く入力されています。しかし、あなたのアクションメソッドでは、あなたがdb.Deapartmentコレクション内の各項目について、DepartmentIdDepartmentNameプロパティを持つ匿名オブジェクトを作成しているここでは、このコードで

db.Deapartment.Select(x => new 
          { 
           x.DepartmentId, 
           x.DepartmentName 

        }) 

を新しい匿名のオブジェクトのリストを作成しています。匿名オブジェクトのリストである上記のコードの結果をビューに渡しています。あなたのビューは現在強く型付けされているものとは異なるタイプになります。したがって例外が発生しています。

ToList()db.Deapartmentに渡し、それをビューに渡すだけです。

ここ
public ActionResult ShowDepartments() 
{ 
    var departmentList = db.Deapartment.ToList(); 
    return View(departmentList); 
} 

departmentList変数はDeapartmentオブジェクトのコレクションになります。

1

ビューに渡すオブジェクトがデータベースオブジェクトと同じになるため、Shyjuの回答が機能します。これは必ずしも当てはまるとは限りません(実際にそうでない場合は、より良いことです)。

これを処理するための正しい方法は、指定されたオブジェクトを作成することです:

 var departmentList = db.Deapartment.Select(x => new Department 
     { 
      x.DepartmentId, 
      x.DepartmentName 

     }).ToList(); 

(私はLINQの構文で行くと思いますが、ラムダ構文は全く同じように動作します)

 var departmentList = 
        (from x in db.Deapartment 
        select new Department 
        { 
         x.DepartmentId, 
         x.DepartmentName 
        }).ToList(); 
関連する問題