2010-10-08 10 views
8

Ich versuche, Code mit OData arbeiten. Das folgende Bit Code scheint nicht zu funktionieren.Probleme mit einem OData-Filter und einem Guid-Feld

ds ist OpenDataServiceProxy.

adapterTypeId ist die Zeichenfolgendarstellung eines Guid.

adapter ist ein String Name

ds.query('/DataAdapters?$filter=DataAdapterType.DataAdapterTypeId eq guid(\'' + adapterTypeId + '\') and Name eq \'' + adapterName + '\'', ifmgr_CreateAdapter_Step1, onGenericFailure, 'Error'); 

Die obige Zeile der folgenden Fehler geben:

Expression des Typs 'System.Boolean' an Position erwartet 0.

Wenn ich entfernen Der GUID-Abschnitt des Filters, so dass es nur den "Name" Teil verwendet, funktioniert es gut.

Die Dataadapters Tabellenfeld „DataAdapterTypeId“ fremd ist verkeilt auf die „DataAdapterTypes“ Tabelle DataAdapterTypeId Feld.

Kann jemand feststellen, was ich falsch mache?

------------------- EDIT ----------------------

OK, ich habe den Filter wie unten gezeigt geändert. Ich erhalte keinen Fehler mehr, bekomme aber viele Ergebnisse zurück anstatt einen Datensatz, der dem Filter entspricht. Kann jemand sagen, warum es nicht filtert?

ds.query('/DataAdapters?($filter=Name eq \'' + adapterName + '\' and $filter=DataAdapterTypeId eq guid\'' + adapterTypeId + '\')', ifmgr_CreateAdapter_Step1, onGenericFailure, ''); 

Antwort

14

der GUID-Wert muss wie guid formated wird ‚‘ - siehe diese Details: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem Sie wissen nicht, was Sie mit dem DataAdapterType.DataAdatperTypeId, aber die Punktzeichen haben keine besondere Bedeutung erreichen wollten in der Filterausdruck, so dass es wahrscheinlich nicht das tut, was Sie wollten. Wenn Ihr Dataadapters Entitätssatz hat Entitäten vom Typ DataAdapterType, die dann eine Eigenschaft DataAdapterTypeId hat, die vom Typ GUID ist, dann kann man auf sie filtern, indem Sie einfach

DataAdapterTypeId eq guid'<value>' 
+0

machte ich die Änderungen empfohlen, aber jetzt habe ich alle Datensätze zurück, nicht nur derjenige, der den Filter übereinstimmt. Ich habe meiner ursprünglichen Frage Details hinzugefügt. – Retrocoder

+0

Legen Sie keine Parthesis um die $ -Filter herum. –

+0

Wenn yoy wollen zwei Bedingungen verwenden, so etwas wie: $ filter = Name eq 'foo' und Beschreibung eq 'bar' –

1

können Sie die aktualisierte URL-Konvention Referenz here finden.

1

Mit OData v4, was für mich auf ASP.NET funktioniert, ist

'DataAdapterTypeId eq ' + adapterTypeId

keine Zitate Beobachten oder wirft um den GUID-Wert. Es wird einen Fehler aus, wenn adapterTypeId kein GUID ist.

Verwandte Themen