小编Ric*_*yek的帖子

如何在 IEnumerable/IQueryable 集合上应用 odata FilterClause

我正在为我们的 odata v4 服务实现一些功能。我们希望支持所有函数的过滤查询选项,就像实体集合一样。

假设我们有一个 SearchProducts 函数,它接受一个 ProductType 参数,并返回属于特定 ProductType 的所有产品。

现在的问题是,我没有找到任何支持这种需求的 odata 内置方法。我能弄清楚的唯一方法是手动解析 FilterClause,然后将其应用于从函数返回的结果。

检查此示例代码:

IQueryable<Product> collection = _service.SearchProducts(ProductType.Phone); 
var parser = new ODataUriParser(model, new Uri("SearchProducts(ProductType='Phone')?$filter=Name eq 'IPhone'", UriKind.Relative));
var filter = parser.ParseFilter();
// TODO: apply filter on collection, to filter all iphones. get the results same as the following code 
// TODO: collection = collection.Where(p=>p.Name == "IPhone");
Run Code Online (Sandbox Code Playgroud)

该系列将是所有电话产品。添加 $filter 字符串后,它应该返回所有 iPhone 产品。

我可以将 FilterClause 解析为 lambda 表达式,然后将其应用于集合以返回正确的结果。但是考虑到 $filter 的复杂性,解析器可能会非常复杂并且会花费很多时间。

有人对此有快速解决方案吗?谢谢你

c# filter odata

5
推荐指数
1
解决办法
785
查看次数

标签 统计

c# ×1

filter ×1

odata ×1