2010-10-08 19 views
8

Estoy intentando obtener algún código que funcione usando OData. El siguiente bit de código no parece funcionar.Problemas con un filtro OData y un campo Guid

ds es OpenDataServiceProxy.

adapterTypeId es la cadena de representación de un Guid.

adaptername es un nombre de cadena

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

La línea anterior da el siguiente error:

Expresión del tipo 'System.Boolean' espera en la posición 0.

Si quito la sección Guid del filtro para que solo use la parte "Nombre" funciona bien.

El campo de tabla DataAdapters "DataAdapterTypeId" tiene una clave externa al campo DataAdapterTypeId de la tabla "DataAdapterTypes".

¿Alguien puede detectar lo que estoy haciendo mal?

------------------- EDITAR ----------------------

OK, he cambiado el filtro como se muestra a continuación. Ya no recibo un error, obtengo muchos resultados en lugar de un registro que coincida con el filtro. ¿Alguien puede decir por qué no se está filtrando?

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

Respuesta

14

El valor GUID necesita ser formateada como GUID '' - ver esto para más detalles: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem no saben lo que quería lograr con el DataAdapterType.DataAdatperTypeId, pero el carácter de punto no tiene ningún significado especial en la expresión de filtro, por lo que probablemente no haga lo que usted quería. Si su DataAdapters conjunto de entidades tiene entidades de tipo DataAdapterType, que a su vez tiene un DataAdapterTypeId propiedad que es de tipo GUID, a continuación, puede filtrar en él simplemente

DataAdapterTypeId eq guid'<value>' 
+0

Hice los cambios que recomendó, pero ahora recupero todos los registros, no solo el que coincide con el filtro. He agregado detalles a mi pregunta original. – Retrocoder

+0

No coloque parestesis alrededor de los $ filtros. –

+0

Si desea dos condiciones, use algo como: $ filter = Nombre eq 'foo' y Descripción eq 'bar' –

1

Puede encontrar la referencia convención URL actualizada here.

1

Con OData v4 lo que funciona para mí en ASP.NET es

'DataAdapterTypeId eq ' + adapterTypeId

Observar sin comillas o ponga en torno al valor GUID. Lanzará un error si adapterTypeId no es un GUID.

Cuestiones relacionadas