【问题标题】: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”
【发布时间】:2015-05-13 18:46:09
【问题描述】:

从我的 Kendo ListView 调用 OData 时出现以下异常:

"检测到类型不兼容的二元运算符。找到操作数 类型 'Edm.Guid' 和 'Edm.String' 用于运算符类型 'Equal'"

解码过滤器:
$filter=OrganizationId eq '4c2c1c1e-1838-42ca-b730-399816de85f8'

编码过滤器:
%24filter=组织ID+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)

我的 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);
}

我的 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'
});

【问题讨论】:

  • 我看到 multiple resources 说使用 guid'[VALUE]' 语法是正确的,你能仔细检查一下吗?
  • 我看到了这些并在这次尝试中尝试了它(如上所述): $filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8' 你认为这是(不知何故)格式不正确吗?我被卡住了。
  • 能不能通过fiddler或者直接在浏览器中调用而不是通过剑道调用成功?
  • 不...直接输入 URL 是我能够查看消息的方式(上)
  • 您使用的是什么版本的 OData?只有旧版本的 OData 才需要 guid'...' 语法,当我们标准化时,我们将其简化为只是 '...',就像在您的“解码过滤器”中一样。你能在某处发布一个重现项目吗?

标签: javascript c# kendo-ui odata


【解决方案1】:

如果 OData 服务是协议版本 V4,正确的查询 URL 应该是:

$filter=OrganizationId eq 4c2c1c1e-1838-42ca-b730-399816de85f8

不需要单引号。

【讨论】:

  • 在我的情况下,使用你的解决方案,它返回"{\"message\":\"Syntax error at position 14 in 'Id eq 07a2c616-968b-4a73-97bc-031c401e0b07'.\"}"你有什么线索吗?
  • 当我的 guid 无效(例如,多余的字符)时,我短暂地遇到了此错误消息。 Yusril 评论中的 guid 遇到了同样的问题,但多了一个字符。
  • 我遇到了同样的问题,但使用 int 类型 - 删除引号解决了这个问题。
  • 尝试 [ID eq guid'07a2c616-968b-4a73-97bc-031c401e0b07']。为我工作
【解决方案2】:

我通过 Microsoft Dynamics 查询 OData 4.0 时遇到了这个错误。不幸的是,这里的其他答案没有帮助,即使它们完全正确。我的问题更多是在过滤器中处理 EntityReference。

我最终不得不将我的过滤器调整为类似这样,以正确定位外键。在下面的示例中,“parentaccountid”是我正在查询的实体中的外键。 'accountid' 是帐户实体中的主键。

/opportunities?$select=opportunityid&$filter=parentaccountid/accountid eq 5e669180-be01-e711-8118-e0071b6af2a1

【讨论】:

    【解决方案3】:

    对于 ms crm 中的另一个实体引用具有某种 id 的每个值都应该像这样进行评估。

     $filter=_foodValue eq 593687F4-8B0C-E811-81B1-91CF10505DB5 
    

    不需要引号或 guid 字符串。

    【讨论】:

      【解决方案4】:

      请尝试

      $filter=OrganizationId%20eq%20guid%27067e6162-3b6f-4ae2-a171-2470b63dff02%27
      

      【讨论】:

        【解决方案5】:

        使用 PowerBi Rest API,我能够通过将 GUID 放在单引号内来解决问题: https://api.powerbi.com/v1.0/myorg/groups?%24filter=id%20eq%20'9c02ab25-0e94-4835-92e6-62ac6460acd0'

        【讨论】:

          猜你喜欢
          • 2016-08-24
          • 2015-12-28
          • 1970-01-01
          • 2021-08-15
          • 2013-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多