以下のサンプル コードで定義されているコントローラー メソッドに対して次の OData クエリを実行すると、Get() の結果のクエリが null になります: http://my.host/api/MyClass/ ?$filter=Id eq 1&$expand=MySecondClass
適用されていない ODataQueryOptionsの答えは、これがそれを行う方法であることを示唆していますが、それでも失敗します。はい、MyClass には MySecondClass への参照があります。:)
編集: もう少し調査した結果、$expand を使用している場合にのみ、クエリが null のようです。$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();
}