加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 如何将OData过滤器转换为LINQ表达式?

发布时间:2020-12-16 07:00:38 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试从ODataQueryOptions中提取过滤器表达式,以便我可以在我的业务逻辑类中使用它. public PageResultPoco Get(ODataQueryOptions odataQueryOptions){ ExpressionFuncPoco,bool myExpression = ... // what do i do here? var result = _myBusinessLo
我正在尝试从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 here的博客,我认为(至少我希望)这对我正在尝试做的事情来说太过分了.

我基本上需要在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;
    }
}

在你的情况下,你可以这样做,

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);
}

请注意,表达式包含更像这样的外观,SOTests.Customer [].Where($it => conditional-expression).因此,您可能必须从lambda中提取该条件表达式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读