我正在使用带有Entity Framework的.net web Api。你可以做的非常好
[EnableQuery]
public IQueryable<Dtos.MyDto> Get()
{
return dbContext.MyEntity.Select(m => new MyDto
{
Name = m.Name
});
}
你得到odata适用于Iqueryable,注意还要返回一个预计的dto。
但是select是一个表达式,因此它被转换为sql。现在,在上述情况下,这很好。但是,如果我需要做一些复杂的&#34;在返回dto上格式化,它将开始出现问题,因为SQL无法做到。
是否可以创建一个IQueryable Wrapper?
QWrapper<TEntity,TDo>(dbcontext.MyEntity, Func<TEntity,TDo> dtoCreator)
它实现了IQueryable所以我们仍然返回它允许webapi应用任何odata但是一旦EF完成就会调用Func,从而允许任何&#39; .net代码被调用为不转换为SQL。
我不想做dbContext.MyEntity.ToList()。选择(...)。ToQueryable()或其他任何东西将始终从db返回整个表。
思想?
答案 0 :(得分:0)
因为你的查询已经返回了你想要的数据,如何添加.Select(s =&gt; new MyEntity(){Name = s.Name})如何将它们作为OData响应返回?喜欢:
return dbContext.MyEntity.Select(m => new MyDto
{
Name = m.Name
}).Select(s=>new MyEntity(){ Name=s.Name });