2013-11-22 4 views
1

Когда я выполнить следующий OData запрос к моему методу контроллера, определенный в поле ниже примере кода, результирующий запрос в Get() становится нулевой:? http://my.host/api/MyClass/ $ фильтра = Id экв 1 & $ расширить = MySecondClassOdataQueryOptions создает нулевое выражение

Ответ в ODataQueryOptions not being applied предполагает, что это способ сделать это, но он все еще терпит неудачу. Да, у MyClass есть ссылка на MySecondClass. :)

EDIT: после немного большего исследования, кажется, что запрос равен null, только когда я использую $ expand. Используя $ filter, все работает, как и ожидалось. есть ли некоторые ловушки с использованием $ expand, о котором я не знаю? не

public MyClass { 
    public int Id { get; set; } 
    public int MySecondClassId { get; set; } 
    public MySecondClass MySecondClass { get; set; } 
} 

public MySecondClass { 
    public int Id { get; set; } 
} 

public MyDbContext : DbContext { 
    public DbSet<MyClass> MyClasses { get; set; } 
} 

public IQueryable<MyClassDto> Get(ODataQueryOptions<MyClass> options) 
{ 
    var dbContext = new MyDbContext(); 
    IQueryable<MyClass> myClasses = dbContext.MyClasses; 
    var query = options.ApplyTo(myClasses) as IQueryable<MyClass>; // query is null! 
    query.ToList().Select(Mapper.Map<MyClass, MyClassDto>).AsQueryable(); 
} 

ответ

0

Когда вы используете $ расширить или $ выбрать, а затем использовать метод ApplyTo, результат чем дольше IQueryable нет, поэтому вы получите обратно пустым. В этом случае я не вижу причин, по которым вы бы хотели использовать метод ApplyTo, кроме того, чтобы продолжать использовать AutoMapper. Вам было бы лучше отключить Automapper, проецировать в ваш DTO и украсить метод с помощью [Queryable].