javascript - operadores - Se detectó un operador binario con tipos incompatibles. Tipos de operandos encontrados ''Edm.Guid'' y ''Edm.String'' para el tipo de operador ''Equal''
operadores logicos (1)
Si el servicio OData es de protocolo versión V4, la URL de consulta correcta debería ser:
$filter=OrganizationId eq 4c2c1c1e-1838-42ca-b730-399816de85f8
No se requieren comillas simples.
Recibo la siguiente excepción cuando llamo a OData desde mi Kendo ListView:
"Se detectó un operador binario con tipos incompatibles. Se encontraron tipos de operandos ''Edm.Guid'' y ''Edm.String'' para el tipo de operador ''Equal''"
FILTRO DECODIFICADO:
$ filter = OrganizationId eq ''4c2c1c1e-1838-42ca-b730-399816de85f8''
FILTRO ENCODIDO:
% 24filter = OrganizationId + eq +% 274c2c1c1e-1838-42ca-b730-399816de85f8% 27
TAMBIÉN HAN TRATADO DE FORMA INCORRECTA ESTOS FILTROS:
$ filter = OrganizationId eq guid''4c2c1c1e-1838-42ca-b730-399816de85f8 ''
$ filter = OrganizationId eq cast (''4c2c1c1e-1838-42ca-b730-399816de85f8'', Edm.Guid)
MI LLAMADA DE API WEB PARECE COMO:
// GET: odata/Sites
[HttpGet]
[EnableQuery]
public IHttpActionResult GetSites(ODataQueryOptions<Site> queryOptions)
{
IQueryable<Site> sites = null;
try
{
queryOptions.Validate(_validationSettings);
sites = _siteService.GetAll().OrderBy(x => x.SiteName);
if (sites == null)
return NotFound();
}
catch (ODataException ex)
{
TraceHandler.TraceError(ex);
return BadRequest(ex.Message);
}
return Ok(sites);
}
MI JAVASCRIPT KENDO DATASOURCE PARECE COMO:
var dataSource = new kendo.data.DataSource({
filter: { field: "OrganizationId", operator: "eq", value: that.settings.current.customer.id },
schema: {
data: function (data) {
return data.value;
},
total: function (data) {
return data.length;
}
},
serverFiltering: true,
serverPaging: true,
transport: {
parameterMap: function (options, type) {
var paramMap = kendo.data.transports.odata.parameterMap(options);
// Remove invalid Parameters that Web API doesn''t support
delete paramMap.$inlinecount; // <-- remove inlinecount
delete paramMap.$format; // <-- remove format
delete paramMap.$callback; // <-- remove callbak
// PLEASE NOTICE: That I have tried reformatting unsuccessfully
//paramMap.$filter = paramMap.$filter.replace("OrganizationId eq ", "OrganizationId eq guid");
//paramMap.$filter = "OrganizationId eq cast(''81de6144-987c-4b6f-a9bd-355cb6597fc1'', Edm.Guid)";
return paramMap;
},
read: {
url: buildRoute(''odata/Sites'')
, dataType: ''json''
}
},
type: ''odata''
});