bor*_*ris 5 odata asp.net-web-api
我正在尝试从中提取过滤器表达式,ODataQueryOptions
以便我可以在我的业务逻辑类中使用它.
public PageResult<Poco> Get(ODataQueryOptions odataQueryOptions)
{
Expression<Func<Poco, bool>> myExpression = ... // what do i do here?
var result = _myBusinessLogic.Search(myExpression);
return new PageResult<Poco>(result, null, null);
}
Run Code Online (Sandbox Code Playgroud)
我看了看说明翻译成查询HQL的博客在这里,我认为(至少我希望如此)这是什么,我试图做一个矫枉过正.
我基本上需要在Expression<Func<Poco, bool>>
表单中获取过滤器表达式.我试过玩,ApplyTo()
但我不太明白.任何帮助赞赏.
我们有一个适合您需求的FilterBinder类,但遗憾的是内部类.不过你可以做一个简单的技巧来获取$ filter表达式,
public static class ODataQueryOptionsExtensions
{
public static Expression ToExpression<TElement>(this FilterQueryOption filter)
{
IQueryable queryable = Enumerable.Empty<TElement>().AsQueryable();
queryable = filter.ApplyTo(queryable, new ODataQuerySettings());
return queryable.Expression;
}
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你可以这样做,
public PageResult<Poco> Get(ODataQueryOptions odataQueryOptions)
{
Expression<Func<Poco, bool>> myExpression = odataQueryOptions.Filter.ToExpression<Poco>();
var result = _myBusinessLogic.Search(myExpression);
return new PageResult<Poco>(result, null, null);
}
Run Code Online (Sandbox Code Playgroud)
请注意,表达式包含更像这样的外观
SOTests.Customer[].Where($it => conditional-expression)
.因此,您可能必须从lambda中提取该条件表达式.
归档时间: |
|
查看次数: |
8467 次 |
最近记录: |