2013-05-09 6 views
5

Ich verwende Dynamic Linq library und es gibt Source code and basic docu und die Nuget VersionOperator '==' unvereinbar mit Operandentypen 'Guid' und 'Guid' mit DynamicExpression.ParseLambda <T, bool>

PM> Install-Package DynamicLINQ

ich versuche, eine where-Klausel, die

ich habe versucht, mit dem String "Id == @0"

Guids zu konstruieren beinhaltet. Der Parameter-Array ist nur ein object[] mit dem Wert ( 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 

eine Ausnahme geworfen wird DynamicExpression.ParseLambda

Operator '==' inkompatibel mit Operandentypen 'GUID' und ‚Guid '

  • ich habe auch versucht, mit GUID und String. (gescheitert)
  • Ich versuchte mit und "Id = @ 0" (fehlgeschlagen).
  • String == String funktioniert, genau wie Int32 == int32 aber nicht Guid Guid == nicht

Irgendwelche Ideen?

+0

Vielleicht ein Fehler im Code gibt es als 'Guid' vermerkt ist in ihrer Dokumentation explizite Unterstützung zu haben. – user7116

Antwort

6

Versuchen Sie, die Equals Methode anstelle der == Operator in der Zeichenfolge mit:

"Id.Equals(@0)" 
+0

ObjectDirectoryId.Equals (@ 0) && ObjectId == @ 1 && CultureName == @ 2 mit dem passenden Objekt [] wurde gerade analysiert. :-) Ich werde als korrekte Antwort markieren, sobald der Test abgeschlossen ist, aber es sieht gut aus. Danke pswg –

+0

Es ist sehr gut, aber ich hatte ein Problem mit Nullable Guid. Ich habe diese Ausnahme Ausdruck des Typs 'System.Guid' kann nicht für Parameter des Typs 'System.Object' der Methode 'Boolean Equals (System.Object)' verwendet werden –

+0

@WahidBitar Ich vermute, Sie haben 'MyGuid.Equals (null) 'oder' MyGuid.Equals (@ 0) 'und Sie übergeben einen Parameter von' null' für '@ 0'. Stellen Sie in beiden Fällen sicher, dass Sie "(Guid?) Null" oder "default (Guid?)" Anstelle von "null" verwenden. –