当我对下面示例代码中定义的控制器方法运行以下 OData 查询时,Get() 中的结果查询变为空: http : //my.host/api/MyClass/ ?$filter=Id eq 1&$expand=MySecondClass
未应用 ODataQueryOptions 中的答案表明这是这样做的方法,但它仍然失败。是的,MyClass 确实引用了 MySecondClass。:)
编辑:经过更多研究,似乎只有当我使用 $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();
}