OdataQueryOptions生成null表达式



当我对下面示例代码中定义的控制器方法运行以下OData查询时,Get()中的查询结果变为null:http://my.host/api/MyClass/?$filter=Id eq 1&expand=MySecondClass

ODataQueryOptions中没有应用的答案表明这是实现它的方法,但它仍然失败。是的,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();
}

当使用$expand或$select,然后使用ApplyTo方法时,结果不再是IQueryable,这就是返回null的原因。在这种情况下,除了继续使用AutoMapper之外,我看不出有什么理由要使用ApplyTo方法。您最好放弃Automapper,将其投影到DTO中,并使用[Queryable]装饰该方法。

最新更新