2013-05-09 2 views
5

J'utilise Dynamic Linq library et il y a Source code and basic docu et la version Nugetopérateur '==' incompatible avec les types d'opérandes de Guid 'et 'Guid' en utilisant DynamicExpression.ParseLambda <T, bool>

PM> Installer-Package DynamicLINQ

Je suis en train de construire une clause where qui implique Guids

J'ai essayé avec la chaîne "Id == @0". Le tableau de paramètres est juste un object[] avec la valeur (Guid xxxx)

var whereClauseSB = BuildLogicalKeyWhereClause2(entity, logicalKey); //build string 
    var parms = BuildParamArray(entity, logicalKey); // object[] 
    var whereLambda = Ofsi.Bos.Core.DynamicExpression.ParseLambda<T, bool>(whereClauseSB.ToString(),parms); //parse 

une exception est levée dans DynamicExpression.ParseLambda

opérateur '==' incompatible avec les types d'opérandes de Guid 'et « Guid '

  • J'ai aussi essayé avec (FAIL) GUID et chaîne.
  • J'ai essayé avec et "Id = @ 0" (échouer).
  • Chaîne == œuvres de chaîne, tout comme Int32 == int32 mais pas Guid == Guid ne

Toutes les idées?

+0

Peut-être il y a un bogue dans le code comme 'Guid' est indiqué d'avoir un soutien explicite dans leur documentation. – user7116

Répondre

6

Essayez d'utiliser la méthode Equals au lieu de l'opérateur == dans votre chaîne:

"Id.Equals(@0)" 
+0

ObjectDirectoryId.Equals (@ 0) && ObjectId == @ 1 && CultureName == @ 2 avec l'objet correspondant [] vient d'être analysé. :-) Je vais marquer comme réponse correcte une fois le test terminé, mais ça a l'air bien. Merci pswg –

+0

C'est très bien mais j'ai eu un problème avec Nullable Guid. J'ai cette exception L'expression de type 'System.Guid' ne peut pas être utilisée pour le paramètre de type 'System.Object' de la méthode 'Boolean Equals (System.Object)' –

+0

@WahidBitar Je suppose que vous avez 'MyGuid.Equals (null) 'ou' MyGuid.Equals (@ 0) 'et vous passez un paramètre de' null' fo '@ 0'. Dans les deux cas, assurez-vous que vous utilisez '' (Guid?) Null' ou 'default (Guid?)' Au lieu de simplement 'null'. –