L'opérateur '==' ne peut pas être appliqué aux opérandes de type 'System.Guid' et 'string' dans linq to entity
J'obtiens ce message d'erreur 'Opérateur '==' ne peut pas être appliquée à des opérandes de type 'System.Guid " et "string" dans linq to entityframework code ci-dessous.
dans le code ci-dessous CustomerId est Guid et customerProfileId est une chaîne.
var accountQuery = from C in CustomerModel.CustomerProfile
where C.CustomerId == customerProfileId //Error here
select C;
source d'informationauteur user1029184
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas comparer un Guid pour une chaîne directement. Convertir la chaîne de caractères à un Guid ou le Guid d'une chaîne de caractères.
De la conversion d'un Guid de chaîne est aussi simple que d'appeler
.ToString()
sur la variable, mais il est important de savoir qu'il y a plus d'une façon de formater le Guid. Que ce soit avec ou sans tirets:someguid.ToString()
vous donnera quelque chose commeB06A6881-003B-4183-A8AB-39B51809F196
someGuid.ToString("N")
sera de retour quelque chose commeB06A6881003B4183A8AB39B51809F196
Si vous décidez de convertir
C.CustomerId
à une chaîne, assurez-vous que vous savez quel formatcustomerProfileId
.Si elle peut être soit le format, vous pouvez être mieux de conversion
customerProfileId
à un guid:new Guid(customerProfileId)
.L'inconvénient de cette est que la conversion de la chaîne de Guid va lever une exception si ce n'est pas formatée correctement. Donc, si vous avez obtenu le
customerProfileId
de la saisie de l'utilisateur (comme un champ de formulaire ou URL), vous devez la valider en premier.Toutefois, si vous tirez sur la conversion de Guid à l'extérieur de votre requête, vous finirez probablement avec une meilleure performance depuis comparant Guid est probablement plus rapide que la comparaison de chaînes.
C'est parce que vous ne pouvez pas assimiler un Guid et d'une chaîne.
Si vous avez besoin de convertir le Guid de la chaîne. Normalement, je vous suggère de:
mais
ToString()
n'existe pas dans Linq to entities.La réponse à cette question - Problème pour faire le GUID de la chaîne de valeur dans Linq-to-Entité de la requête - aidera probablement.
Vous devez convertir
CustomerId
à chaîne (appel.ToString()
) oucustomerProfileId
àGuid
(appelGuid.Parse()
) et de les comparer.Le modifier:
Ou analyser votre customerProfileId à un Guid et l'utiliser dans la requête.
Et quelle est la question?
Évidemment, l'une des valeurs est Guid tandis que l'autre est une chaîne de caractères. Vous pouvez essayer de comparer en quelque sorte comme ceci:
C. CustomerId == nouveau Guid(customerProfileId) de prendre de la C. CustomerId est un Guid.
Pouvez-vous faire un C. CustomerId.toString() == customerProfileId ou remplacer customerProfileId avec nouveau Guid(customerProfileId)
Le second doit être plus rapide que son seul de conversion et guid compare sont plus rapides que les comparaisons de chaînes.
vous devez générer un nouveau guid de la corde, et il devrait fonctionner