何时是在实体框架查询上进行ToList的正确时间

时间:2013-12-10 07:39:22

标签: entity-framework

这在我的服务中被调用。现在我问自己应该什么时候在查询中使用.ToList()来实现实体?

我必须要这样做吗?因为我的应用程序层无论如何都会将实体转换为json数组,最后枚举器必须枚举...

我应该遵循这个想法吗?或者仅将物化集合返回到我的应用程序层更好?

IEnumerable<BrowseSchoolyearDTO> ISchoolyearService.GetAll(int userId)
{
   return _context.Schoolyears
        .Where(s => s.UserId == userId)
        .Select(s => s.ToBrowseSchoolyearDto())
        .ToList();
}

1 个答案:

答案 0 :(得分:0)

只要在数据库连接处于活动状态时完成DTO上的所有操作,您根本不需要执行.ToList。如果需要枚举列表并在db事务之外返回,则只需要执行.ToList。

因此,如果您的代码看起来像这样:
编辑:将存储库更改为服务,因为您不使用存储库
    使用(var rep = new service())     {       var list = rep.GetAll(1);       return list.Select(x =&gt; new DTOViewModel(x))。ToList();     } 你不需要.ToList

如果您的代码如下所示:

using(var rep = new service())
    {
      var list = rep.GetAll(1);

    }
      return list.Select(x => new DTOViewModel(x));

然后你需要一个.ToList

编辑以显示更多方法

public void DoSomeOperationCalledFromWeb(int id)
{
  IEnumerable<DTO> list;
  using(var serv = new Service())
  {
    list = rep.GetAll(1).ToList();
    /** OR if you need additional filtering **/
    list = rep.GetAll(1).Where(/**some filtering**/).ToList();
  }
  /** Do operations on list **/
}