2013-11-22 39 views
1

当我运行针对我的控制器的方法以下的OData查询在下面的示例代码中定义,在获取()生成的查询变为零: http://my.host/api/MyClass/ $滤波器=编号当量1 & $扩大= MySecondClassOdataQueryOptions产生空表达

ODataQueryOptions not being applied的答案表明这是做到这一点的方法,但仍然失败。是的,MyClass确实有对MySecondClass的引用。 :)

编辑:多一点研究后,似乎查询为空,只有当我使用$ expand。使用$ filter,everthing按预期工作。有没有使用$ 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]装饰方法。