2010-02-17 5 views
1

En parcourant le livre WROX "Beginning ASP.NET MVC 1.0", j'ai rencontré une étrange "erreur".L'opérateur == ne peut pas être appliqué à Guid ou int dans Linq (exemple de livre MVC)

"Opérateur '==' ne peut pas être appliqué aux opérandes de type 'System.Guid' ou 'int'". La ligne en question est:

(p => p.ID_Officers == id).Single(); 

Le code complet est ci-dessous, et Officers est ma table, ID_Officers est mon champ ID. (Je pense que je pourrais utiliser de « o » au lieu de « p »)

public ActionResult IndividualOfficer(int id) 
    { 
     OfficersDataContext dataContext = new OfficersDataContext(); 
     Officer officer = dataContext.Officers.Where 
      (p => p.ID_Officers == id).Single(); 
     ViewData["OfficerName"] = officer.OfficerName; 
     ViewData["Officer"] = officer; 

     return View(); 
    } 

Les paroles de sagesse pour ce débutant serait apprécié.

Je pourrais ajouter, bien que ce livre a été recommandé pour les débutants - garçon c'est sec. Il est clairement conçu, évident pour voir ce qui doit être ajouté/tapé pendant les exercices, mais je pense qu'il est écrit pour un programmeur expérimenté venant à MVC. Plutôt qu'un programmeur débutant. Donc, est-ce que quelqu'un connaît un livre plus amical pour les débutants (j'aime les livres et la lecture) dans lequel je pourrais plus facilement couler mon temps et mes dents?

Nous vous remercions de votre aide et de vos conseils.

Mike

Répondre

3

C'est très simple.

id est un int. p.ID_Officers est, comme l'indique le message d'erreur, un Guid, qui n'est pas un int et ne peut pas être vérifié par rapport à un int pour l'égalité. Deux types différents, vous savez.

Je ne suis pas sûr d'où vient la id de la méthode du contrôleur. À un moment donné, vous devez présenter à l'utilisateur une liste d'agents, et construire des liens qui pointent vers chaque agent qui inclut le p.ID_Officers dans la définition du lien, mais votre itinéraire attend un int. Sans voir comment vos itinéraires sont configurés ou vos liens d'agent sont construits, je ne peux pas vous donner beaucoup plus d'indice que cela.

0

Eh bien, le problème est que p.ID_Officers est un System.Guid alors que le id vous comparez à est de type int. Donc, vous pouvez changer la signature de votre méthode à

public ActionResult IndividualOfficer(Guid id) 

Et maintenant il devrait pouvoir compiler.

Une autre option serait de changer votre colonne id dans votre schéma de base de données à un int au lieu d'un uniqueidentifier (qui devient un System.Guid dans .net).

+1

Cela suppose que ses routes et liens sont construits correctement. Sinon, les liens d'agent peuvent se retrouver avec un 404 ou ils peuvent être redirigés vers une méthode différente. Ou, il peut avoir de la chance, bien sûr. – Will

+0

Je vais changer mon ID_Officer à un int. J'ai essayé uniqueidentifier parce que cela semblait juste ... ah bien. En ce qui concerne mes itinéraires - je n'ai pas encore touché ceux-ci alors j'imagine que ce sont les défauts du système. Je remarque que je ne suis pas autorisé à simplement changer l'Unique à un int. Ça va, c'est une autre chose que j'ai apprise. Je vais devoir supprimer la base de données, puis ... – RocketGoal

Questions connexes