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

When is the right time to make ToList on an entity framework query

这是为我服务的。现在我问自己,什么时候应该对查询执行.tolist()以实现实体?

我必须这么做吗?因为我的应用层无论如何都会将实体转换为JSON数组,最后必须枚举枚举器…

我应该这样想吗?还是只将物化集合返回到我的应用程序层更好?

1
2
3
4
5
6
7
IEnumerable<BrowseSchoolyearDTO> ISchoolyearService.GetAll(int userId)
{
   return _context.Schoolyears
        .Where(s => s.UserId == userId)
        .Select(s => s.ToBrowseSchoolyearDto())
        .ToList();
}


只要在数据库连接处于活动状态时完成了对DTO的所有操作,就根本不需要执行.tolist。如果需要在DB事务外部枚举和返回列表,则只需执行.to list。

因此,如果您的代码看起来像这样:
编辑:将存储库更改为服务,因为您不使用存储库
使用(var rep=new service()){var list=rep.getall(1);返回list.select(x=>new dtoviewModel(x)).tolist();}你不需要,托利斯

如果代码看起来像这样:

1
2
3
4
5
6
using(var rep = new service())
    {
      var list = rep.GetAll(1);

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

那你就需要一个托勒斯特。

编辑以显示更多方法

1
2
3
4
5
6
7
8
9
10
11
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 **/
}