.net WebApi IQueryable EF

时间:2015-01-29 23:25:02

标签: entity-framework asp.net-web-api odata

我正在使用带有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返回整个表。

思想?

1 个答案:

答案 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 });