2017-05-09 10 views
0

私のMVC5アプリケーションでは、データが入ったテーブルがあります。テーブルの上には、単純なドロップダウンリストがあり、データのフィルタとして(int)branchIdでフィルタリングするために使用されています。ここで データテーブルのフィルタとしてドロップダウンリスト(intベースの項目値付き)を使用した場合のエラー

ViewBag.Branch = db.Branches 
    .ToList() 
    .Select(rr => new SelectListItem { Value = rr.Id.ToString(), Text = rr.BranchName }) 
    .ToList(); 

は、ドロップダウンリストだ私はviewbag経由branchIdのドロップダウンリストを埋めるよ

... ....私のPOSTメソッドで

@Html.DropDownList("branchId", 
    (IEnumerable<SelectListItem>)ViewBag.Branch, 
    "-- All Branches --") 

私はデータをフィルタリングしようとしています....

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult GetEventsByUser(int? branchId) 
    { 
     : 
     IQueryable<Event> events; 
     events = db.Events; 
     : 
     if (branchId != null) 
     { 
      events = events 
       .Include(a => a.Branch) 
       .Where(b => Equals(b.Branch.Id, branchId)); 
     } 
     else 
     { 
      events = events 
       .Include(a => a.Branch); 
     } 
     : 
     : 
     return View("Index", events.ToList()); 

最終行でエラーが発生します。エラーは次のとおりです。

Unable to cast the type 'System.Int32' to type 'System.Object'. 
LINQ to Entities only supports casting EDM primitive or enumeration types. 

このintベースのフィールドのフィルタとしてどのようにドロップダウンを使用できますか?

+1

「あなたが(b => b.Branch.Id == branchId)」を試しましたか? – user1845593

+0

@ user1845593それはそれでした!どのように私はあなたに信用を与えることができますかありがとう! :) – WebDevGuy2

+0

これは問題ありません。レコードを保存するだけのソリューションを投稿できます。ほとんどの人はコメントを無視します。将来の投稿のためのちょっとした提案。たとえば、エラーの名前のような暗黙的な名前を付けてください。あなたに固有ではないものがあります。 – user1845593

答えて

1

問題はLINQでサポートされていないEqualsに関連しています。==に変更してください。

 events = events 
      .Include(a => a.Branch) 
      .Where(b => b.Branch.Id == branchId); 
関連する問題