tags:

views:

27

answers:

1

I’m trying to get some code working using OData. The following bit of code doesn’t seem to work.

ds is OpenDataServiceProxy.

adapterTypeId is the string representation of a Guid.

adapterName is a string name

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

The above line give the following error:

Expression of type ‘System.Boolean’ expected at position 0.

If I remove the Guid section of the filter so that it’s just using the “Name” part it works fine.

The DataAdapters table field “DataAdapterTypeId” is foreign keyed to the “DataAdapterTypes” table DataAdapterTypeId field.

Can anyone spot what I’m doing wrong?

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

OK, I've changed the filter as shown below. I no longer get an error but get lots of results back rather than one record that matches the filter. Can anyone say why it's not filtering?

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

The guid value needs to be formated like guid'' - see this for details: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem Don't know what you wanted to achieve with the DataAdapterType.DataAdatperTypeId, but the dot character has no special meaning in the filter expression, so it probably doesn't do what you wanted. If your DataAdapters entity set has entities of type DataAdapterType, which then has a property DataAdapterTypeId which is of type GUID, then you can filter on it by simply

DataAdapterTypeId eq guid'<value>'
Vitek Karas MSFT
I made the changes you recommended but now I get all the records back, not just the one that matches the filter. I have added details to my original question.
Retrocoder
Do not put parethesis around the $filters.
Vitek Karas MSFT
If yoy want two conditions use something like:$filter=Name eq 'foo' and Description eq 'bar'
Vitek Karas MSFT
The syntax is fully described here: http://www.odata.org/developers/protocols/uri-conventions
Vitek Karas MSFT