8
votes

Impossible de créer une valeur constante de type 'system.Object'. Seuls les types primitifs («tels que INT32, String et GUID») sont pris en charge dans ce contexte

J'utilise le cadre MVC et entité. J'ai créé une classe dans mon dossier modèle avec ce code ci-dessous. Je continue à obtenir le message d'erreur ci-dessus avec les deux requêtes ci-dessous. Je sais qu'il y a un problème connu sur la référencement des variables non scalaires, mais je ne sais pas comment mettre en œuvre une solution de contournement:

http://msdn.microsoft.com/en-us/library/bb896317.aspx#y1442 xxx


0 commentaires

3 Réponses :


13
votes

Vous ne pouvez pas utiliser m.checkedout.equals (1) dans la requête Linq-to-entités. Utilisez m.checkedout == 1 mais curedout doit être integer .


3 commentaires

Merci! C'est en fait un champ de bits dans SQL Server, donc j'ai utilisé cela à la place et cela a fonctionné: où (m.Checkedout == vrai)


Equals fonctionne bien à Linq vers des entités. Je l'utilise tout le temps. par exemple. .where (r => r.employename.equals (EmailEname, StringComParisonSon.invariantcultureCase))


Merci. C'est l'une de ces choses qui sont presque impossibles à trouver avec le message d'erreur.



1
votes

même numéro utilisant tout () Je devais changer ma clause où la clause de recherche sur des types primitifs, pour moi Int

de sorte que ce xxx

devient ce xxx

Il y a un blog post Expliquer l'ennemi.


0 commentaires

3
votes

C'est une question plus âgée. J'ai eu le même problème lorsque vous essayez de filtrer une colonne nullable à l'aide de l'interface iquéreuse. J'ai résolu le problème en vérifiant d'abord pour voir si l'objet avait une valeur, puis vérifiant la valeur.

widgets = widgets.Where(x => x.ID.HasValue.Equals(true) &&  x.ID.Value.Equals(widgetID));


0 commentaires