检测到具有不兼容类型的二元运算符。找到运算符种类 'Equal' 的操作数类型 'Edm.Guid' 和 'Edm.String'
A binary operator with incompatible types was detected. Found operand types 'Edm.Guid' and 'Edm.String' for operator kind 'Equal'
从我的 Kendo ListView 调用 OData 时出现以下异常:
"A binary operator with incompatible types was detected. Found operand
types 'Edm.Guid' and 'Edm.String' for operator kind 'Equal'"
解码过滤器:
$filter=OrganizationId eq '4c2c1c1e-1838-42ca-b730-399816de85f8'
编码过滤器:
%24filter=OrganizationId+eq+%274c2c1c1e-1838-42ca-b730-399816de85f8%27
还尝试了这些过滤器但未成功:
$filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8'
$filter=OrganizationId eq cast('4c2c1c1e-1838-42ca-b730-399816de85f8', Edm.Guid)
我的网站 API 调用看起来像:
// 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);
}
我的 JAVASCRIPT KENDO 数据源看起来像:
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 callback
// 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'
});
如果OData服务是协议版本V4,正确的查询URL应该是:
$filter=OrganizationId eq 4c2c1c1e-1838-42ca-b730-399816de85f8
不需要单引号。
在 ms crm 中具有对另一个实体引用的某种 id 的每个值都应该像这样评估。
$filter=_foodValue eq 593687F4-8B0C-E811-81B1-91CF10505DB5
不需要引号或 GUID 字符串。
我 运行 通过 Microsoft Dynamics 查询 OData 4.0 时遇到此错误。不幸的是,这里的其他答案并没有帮助,即使它们是完全正确的。我的问题更多是在过滤器中处理 EntityReference。
我最终不得不将我的过滤器调整为这样的东西,以正确地定位外键。在下面的示例中,'parentaccountid' 是我正在查询的实体中的外键。 'accountid' 是帐户实体中的主键。
/opportunities?$select=opportunityid&$filter=parentaccountid/accountid eq 5e669180-be01-e711-8118-e0071b6af2a1
请尝试
$filter=OrganizationId%20eq%20guid%27067e6162-3b6f-4ae2-a171-2470b63dff02%27
使用 PowerBi Rest API,我可以通过将 GUID 放在单引号内来解决问题:
https://api.powerbi.com/v1.0/myorg/groups?%24filter=id%20eq%20'9c02ab25-0e94-4835-92e6-62ac6460acd0'
从我的 Kendo ListView 调用 OData 时出现以下异常:
"A binary operator with incompatible types was detected. Found operand types 'Edm.Guid' and 'Edm.String' for operator kind 'Equal'"
解码过滤器:
$filter=OrganizationId eq '4c2c1c1e-1838-42ca-b730-399816de85f8'
编码过滤器:
%24filter=OrganizationId+eq+%274c2c1c1e-1838-42ca-b730-399816de85f8%27
还尝试了这些过滤器但未成功:
$filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8'
$filter=OrganizationId eq cast('4c2c1c1e-1838-42ca-b730-399816de85f8', Edm.Guid)
我的网站 API 调用看起来像:
// 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);
}
我的 JAVASCRIPT KENDO 数据源看起来像:
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 callback
// 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'
});
如果OData服务是协议版本V4,正确的查询URL应该是:
$filter=OrganizationId eq 4c2c1c1e-1838-42ca-b730-399816de85f8
不需要单引号。
在 ms crm 中具有对另一个实体引用的某种 id 的每个值都应该像这样评估。
$filter=_foodValue eq 593687F4-8B0C-E811-81B1-91CF10505DB5
不需要引号或 GUID 字符串。
我 运行 通过 Microsoft Dynamics 查询 OData 4.0 时遇到此错误。不幸的是,这里的其他答案并没有帮助,即使它们是完全正确的。我的问题更多是在过滤器中处理 EntityReference。
我最终不得不将我的过滤器调整为这样的东西,以正确地定位外键。在下面的示例中,'parentaccountid' 是我正在查询的实体中的外键。 'accountid' 是帐户实体中的主键。
/opportunities?$select=opportunityid&$filter=parentaccountid/accountid eq 5e669180-be01-e711-8118-e0071b6af2a1
请尝试
$filter=OrganizationId%20eq%20guid%27067e6162-3b6f-4ae2-a171-2470b63dff02%27
使用 PowerBi Rest API,我可以通过将 GUID 放在单引号内来解决问题: https://api.powerbi.com/v1.0/myorg/groups?%24filter=id%20eq%20'9c02ab25-0e94-4835-92e6-62ac6460acd0'