以下代码将 ViewModel 查询转换为模型,然后将返回的结果作为 PageResult 转换回 ViewModel。所有这一切都很好,但是当我尝试使用包含作为我的默认查询的一部分(或者甚至使用最新版本作为查询上下文的一部分)时,OData 格式化程序会很有趣并且不包含子元素。我已经调试并确认它实际上包含子元素。这只发生在我从 ODataController 扩展的控制器上(所以基本上对于从 ApiController 扩展的控制器都可以正常工作,但我需要 OData 格式的结果)。 请注意,我也尝试过使用最新的夜间版本(Microsoft.Data.OData 5.5.0.0),但它仍然对我不起作用。 任何帮助将不胜感激。
public class ProductsController : ODataController
{
APPContext context = new APPContext();
public PageResult<ProductViewModel> Get(ODataQueryOptions QueryOptions)
{
EdmModel model = new EdmModel();
ODataQueryContext queryContext = new ODataQueryContext(model.GetEdmModel(), typeof(Product));
var mappedQuery = new ODataQueryOptions(queryContext, QueryOptions.Request);
var results = new List<ProductViewModel>();
foreach (var result in mappedQuery.ApplyTo(this.context.Serials.Include("Status").Include("Category")))
{
AutoMapper.Mapper.CreateMap(result.GetType(), typeof(ProductViewModel));
results.Add(AutoMapper.Mapper.Map<ProductViewModel>(result));
}
PageResult<ProductViewModel> pr = new PageResult<ProductViewModel>(results.AsEnumerable<ProductViewModel>(), mappedQuery.Request.GetNextPageLink(), mappedQuery.Request.GetInlineCount());
return pr;
}
}