是否可以在EF DBsets中应用OData过滤器

时间:2018-01-11 03:20:48

标签: .net entity-framework rest asp.net-web-api odata

我将以下模型作为Web API控制器操作的输入

public class Query
{
    public string Filter { get; set; }
    public string OrderBy { get; set; }
    public int? Skip { get; set; }
    public int? Top { get; set; }
}

此处使用的过滤器采用OData过滤器格式。

我将相同的模型传递给数据访问层以过滤数据库中的实体。是否可以使用数据访问层中的OData库直接在EF实体上应用'FilterOrderBySkipTop

1 个答案:

答案 0 :(得分:1)

我不确定你究竟在问什么,但我可以假设你的问题是"解析"该解决方案的一部分:)

我的答案是'是',但这有点棘手。

您可以使用ODataQueryOptionParser类。使用此解析器,您可以将过滤器表达式解析为FilterClause。 使用FilterBinder,您现在可以将FilterClause解析为Expression(谓词),并将该表达式用作dbset中Where方法的参数。 为了实现这一切,您必须为解析器提供EDM模型。