如何使用 kendo 数据源以编程方式应用复杂的 odata 过滤器?

How to apply complex odata filters programatically with kendo data sources?

我有一个 kendo 数据源(附加到网格以防万一)它是一个 OData v4 端点源。 我需要对其应用类似此过滤器的东西...

LINQ 查询:

ds.data().Where(i => i.References.Any(r => r.OfferLines.Any(l => l.OfferId == "myOfferId"))

OData 查询:

?$filter=References/any(r:r/OfferLines/any(l:l/OfferId eq 'myOfferId'))

我如何使用 teleriks 记录的函数 dataSource.filter "after my grid has been initialised" 以编程方式执行此操作?

您可以使用 parameterMap 事件来注入自定义过滤器。这是我的代码示例,用于按多个或条件过滤文章。

dataSource: {
    type: "odata-v4",
    serverFiltering: true,
    transport: {
        read: "/oData/Article",
        parameterMap: function (data) {
            //Get value used to filter
            var value = data.filter.filters[0].value;
            //Generate parameters in odata v4 format
            var d = kendo.data.transports['odata-v4'].parameterMap(data);
            //Add filter by matching any reference containing value
            d.$filter = "References/any(ref: contains(tolower(ref/Reference),'" + value + "')))";
            return d;
        }
    },
}