如何使用 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;
}
},
}
我有一个 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;
}
},
}