2013-11-22 40 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]裝飾方法。