javascript - 检测到具有不兼容类型的二元运算符。为运算符种类 'Edm.Guid' 找到操作数类型 'Edm.String' 和 'Equal'

标签 javascript c# kendo-ui odata

从我的 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)

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

最佳答案

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

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

不需要单引号。

关于javascript - 检测到具有不兼容类型的二元运算符。为运算符种类 'Edm.Guid' 找到操作数类型 'Edm.String' 和 'Equal',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995757/

相关文章:

JavaScript:如果使用特定值实例化现有对象,如何创建警报?

javascript - 如何使用 Firebase 创建动态 HTML 表格?

javascript - 如何将 Angular 数组数据发送到 Controller ?

c# - 如何根据 MessageBox 选择显示对话框

javascript - 剑道 : Direction property for context main menu

javascript - JavaScript货币正则表达式-用点代替小数点逗号

c# winforms - 更改数组的值不起作用

c# - 在 asp.net 中检查是否所有复选框都被选中 == false

kendo-ui - 在 Kendo 中获取 Angular TreeView 的节点元数据

javascript - 禁用剑道自动完成