我试图从提取过滤器表达式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);
}
我看了看说明翻译成查询HQL的博客在这里 ,我认为(至少我希望如此)这是什么,我试图做一个矫枉过正。
基本上,我需要得到在过滤器表达式Expression<Func<Poco, bool>>
形式。 我试图打ApplyTo()
但我不能完全得到它。 任何帮助表示赞赏。
我们有适合您的需求,但内部可惜FilterBinder类。 但是你可以做一个简单的技巧,以获得$过滤器表达式的保持,
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;
}
}
你的情况,你可以做,
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);
}
注意,表达式包含看起来更像此, SOTests.Customer[].Where($it => conditional-expression)
。 所以,你可能需要提取从拉姆达是条件表达式。