相关疑难解决方法(0)

修改WebAPI OData QueryOptions.Filter的最佳方法

我正在使用http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/working-with-entity-relations上的OData示例项目.在Get我希望能够更改EntitySetController的QueryOptions中的Filter:

public class ProductsController : EntitySetController<Product, int>
{
    ProductsContext _context = new ProductsContext();

    [Queryable(AllowedQueryOptions=AllowedQueryOptions.All)]
    public override IQueryable<Product> Get()
    {
        var products = QueryOptions.ApplyTo(_context.Products).Cast<Product>();
        return products.AsQueryable();
    }
Run Code Online (Sandbox Code Playgroud)

我希望能够找到专门提到的属性.我可以通过解析this.QueryOptions.Filter.RawValue属性名称来做到这一点,但我无法更新RawValue它,因为它是只读的.然而,我可以FilterQueryOption从修改后创建另一个实例,RawValue但我无法将其分配给它,this.QueryOptions.Filter因为它也是只读的.

我想我可以调用新过滤器ApplyTo传递它_context.Products,但后来我需要单独调用like 和ApplyTo的其他属性.有没有比这更好的解决方案?QueryOptionsSkipOrderBy

更新

我尝试了以下方法:

    public override IQueryable<Product> Get()
    {
        IQueryable<Product> encryptedProducts = _context.Products;

        var filter = QueryOptions.Filter;
        if (filter != null && filter.RawValue.Contains("Name"))
        {
            var settings = new ODataQuerySettings();
            var originalFilter = …
Run Code Online (Sandbox Code Playgroud)

odata asp.net-web-api

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

asp.net-web-api ×1

odata ×1