我为odata v4服务实现了一些功能。 我们想支持所有函数的过滤器查询选项,就像实体集合一样。
假设我们有一个接受ProductType参数的SearchProducts函数,并返回属于特定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");
该系列将成为所有手机产品。添加$ filter字符串后,它应该返回所有IPhone产品。
我可以将FilterClause解析为lambda表达式,然后将其应用于collection以返回正确的结果。但考虑到$ filter的复杂性,解析器可能非常复杂并且需要花费很多时间。
任何人都可以快速解决这个问题吗?谢谢