有2类,Foo和Bar。Foo对象中嵌套了一个Bar对象。
public class Foo { public Guid FooId { get; set; } public string FooName { get; set; } [ForeignKey("Bar")] public Guid BarId { get; set; } public virtual Bar Bar { get; set; } } public class Bar { public Guid BarId { get; set; } public string BarName { get; set; } } public class FooBarContext : DbContext { public DbSetFoos { get; set; } public DbSet Bars { get; set; } } public class FooDTO { public Guid FooId { get; set; } public string FooName { get; set; } public Guid BarId { get; set; } public string BarName { get; set; } }
我的问题是:我可以以某种方式将FooDTO的OData查询转换为Foo的OData查询,以便可以将其应用于Foos DbSet吗?
例如,我想通过BarName进行查询,该名称最终来自嵌套的Bar对象。
GET /Foos?$filter=BarName eq 'Bar2'
这是处理查询的控制器和操作
public class FoosController { public async TaskGetFoos(ODataQueryOptions queryOptions) { // translate filter FooDTO.BarName to filter Foo.Bar.Name // ODataQueryOptions fooQueryOptions = .... using (var context = new FooBarContext()) { return fooQueryOptions.ApplyTo(context.Foos); } } }
谢谢。