javascript 检测到类型不兼容的二元运算符。找到操作符类型“Equal”的操作数类型“Edm.Guid”和“Edm.String”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/28995757/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
A binary operator with incompatible types was detected. Found operand types 'Edm.Guid' and 'Edm.String' for operator kind 'Equal'
提问by Prisoner ZERO
I am getting the following exception when calling OData from my Kendo ListView:
从我的 Kendo ListView 调用 OData 时出现以下异常:
"A binary operator with incompatible types was detected. Found operand types 'Edm.Guid' and 'Edm.String' for operator kind 'Equal'"
“检测到具有不兼容类型的二元运算符。找到运算符类型 'Equal' 的操作数类型 'Edm.Guid' 和 'Edm.String'”
DECODED FILTER:
$filter=OrganizationId eq '4c2c1c1e-1838-42ca-b730-399816de85f8'
解码过滤器:
$filter=OrganizationId eq '4c2c1c1e-1838-42ca-b730-399816de85f8'
ENCODED FILTER:
%24filter=OrganizationId+eq+%274c2c1c1e-1838-42ca-b730-399816de85f8%27
编码过滤器:
%24filter=OrganizationId+eq+%274c2c1c1e-1838-42ca-b730-399816de85f8%27
HAVE ALSO UNSUCESSFULLY TRIED THESE FILTERS:
$filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8'
$filter=OrganizationId eq cast('4c2c1c1e-1838-42ca-b730-399816de85f8', Edm.Guid)
Ed 也尝试过这些过滤
器不成功:$filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8'
$filter=OrganizationId eq cast('4c2c1c1e-1838-898106)
MY WEB API CALL LOOKS LIKE:
我的 WEB 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);
}
MY JAVASCRIPT KENDO DATASOURCE LOOKS LIKE:
我的 JAVASCRIPT 剑道数据源看起来像:
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'
});
回答by Yi Ding - MSFT
If the OData service is of protocol version V4, the correct query URL should be:
如果 OData 服务的协议版本为 V4,则正确的查询 URL 应为:
$filter=OrganizationId eq 4c2c1c1e-1838-42ca-b730-399816de85f8
No single quotes is required.
不需要单引号。
回答by raterus
I ran into this error querying OData 4.0 through Microsoft Dynamics. The other answers here didn't help unfortunately, even though they are exactly right. My issue was more with handing EntityReference's in filters.
我在通过 Microsoft Dynamics 查询 OData 4.0 时遇到了这个错误。不幸的是,这里的其他答案没有帮助,即使它们完全正确。我的问题更多是在过滤器中处理 EntityReference。
I ended up having to adjust my filter to something like this, to target the foreign key properly. In the example below 'parentaccountid' is the foreign key in the entity I was querying. 'accountid' is the primary key in the accounts entity.
我最终不得不将我的过滤器调整为这样的东西,以正确定位外键。在下面的示例中,'parentaccountid' 是我查询的实体中的外键。“accountid”是帐户实体中的主键。
/opportunities?$select=opportunityid&$filter=parentaccountid/accountid eq 5e669180-be01-e711-8118-e0071b6af2a1
回答by RohitKumar
Every value which is having kind of an id to another entity reference in ms crm, should be evaluated like this.
每个在 ms crm 中对另一个实体引用具有某种 id 的值都应该像这样进行评估。
$filter=_foodValue eq 593687F4-8B0C-E811-81B1-91CF10505DB5
Does not require quotes or guid string.
不需要引号或 guid 字符串。
回答by Animesh Kumar
Please try
请试试
$filter=OrganizationId%20eq%20guid%27067e6162-3b6f-4ae2-a171-2470b63dff02%27