Как сопоставить запрос вложенного фильтра OData с DTO другому объекту? - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь проверить работоспособность фильтра ASP.NET Web API OData V4 $.

Я мог бы сопоставить запрос вложенного фильтра с DTO другому объекту, легко следуя ответу здесь , не используя AutoMapper.

Но я хочу отобразить вложенный фильтрзапрос к не сложному DTO.

например.сопоставление ?$filter= SubProperties/Amount eq 100 с DTO, имеющим поле Amount в классе SubProperties, и последующее сопоставление его с целевым DTO, у которого свойство Amount не является вложенным.

GET products? $ filter = SubProperties /Сумма экв. 100`

Класс продукта:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Level { get; set; }
    public Properties SubProperties {get;set;}
}

public class Properties
{
    public double Amount{ get; set; }
}

Класс ProductDTO:

public class ProductDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Level { get; set; }
    public double Amount { get; set; }
}

Контроллер продуктов:

public class ProductsController : ApiController
{
    public IEnumerable<ProductDTO> Get(ODataQueryOptions<Product> options)
    {
       IQueryable<Product> products = this._products.AsQueryable();

        IEdmModel model = GetProductDTOModel();
        IEdmType type = model.FindDeclaredType(typeof(ProductDTO).ToString());
        ODataQueryOptionParser parser = new ODataQueryOptionParser(model, type, null, new Dictionary<string, string> { { "$filter", options.Filter.RawValue } });
        ODataQueryContext context = new ODataQueryContext(model, typeof(Product), options.Context.Path);
        FilterQueryOption filterMapper = new FilterQueryOption(options.Filter.RawValue, context, parser);

    }
}

Когда яразверните опции -> Фильтр правильно сопоставлен со строкой запроса фильтра, и FilterClause загружается правильно.Но после сопоставления его с ProductsDTO и расширения на filterMapper, FilterClause выдает исключение, так как у него нет свойства SubProperties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...