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

时间:2015-12-02 11:15:24

标签: c# filter odata

我为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的复杂性,解析器可能非常复杂并且需要花费很多时间。

任何人都可以快速解决这个问题吗?谢谢

0 个答案:

没有答案