2017-05-09 1 views
0

Dans mon application MVC5, j'ai une table contenant des données. Au-dessus de la table, j'ai une liste déroulante simple, à utiliser comme filtre pour les données, en filtrant par (int) branchId.Erreur lors de l'utilisation de dropdownlist (avec des valeurs d'éléments basées sur int) comme filtre pour la table de données

Je remplir le DropDownList BRANCHID via le ViewBag ...

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

est ici le dropdownlist ....

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

Sur ma méthode POST J'essaie de filtrer les données ....

[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()); 

L'erreur se produit sur la dernière ligne. L'erreur est:

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

Comment puis-je utiliser la liste déroulante en tant que filtre pour ce champ basé sur int?

+1

Avez-vous essayé '. Où (b => b.Branch.Id == branchId)'? – user1845593

+0

@ user1845593 c'était tout! Comment puis-je vous donner un crédit? Merci! :) – WebDevGuy2

+0

C'est bien. Je peux poster une solution juste pour garder le record. La plupart des gens ignorent les commentaires. Juste une suggestion pour les prochains messages. Donnez-lui un nom suggestif, comme le nom de l'erreur par exemple, quelque chose de générique et pas spécifique à vous – user1845593

Répondre

1

Votre problème est lié à l'égalité, qui n'est pas prise en charge par LINQ, remplacez-la par ==.

 events = events 
      .Include(a => a.Branch) 
      .Where(b => b.Branch.Id == branchId);