列出并且没有tolist

时间:2014-10-01 02:49:41

标签: c# linq

我想知道何时使用tolist。在以下示例中,以下两个都不会导致错误。那么,使用哪种方式?

 var employees = db.Employees.Include(e => e.Department);
            return View(employees);

 var employees = db.Employees.Include(e => e.Department);
            return View(employees.ToList());

2 个答案:

答案 0 :(得分:5)

似乎代码是ASP.Net MVC代码..给定return View(employees); 我还假设使用LinqToSQL或EntityFramework等技术从数据库中提取数据。

鉴于这两个假设,我建议使用后者。即.ToList() 原因是,如果对帐户进行延迟评估,如果您在没有employees的情况下传递.ToList(),则实质上是将查询传递给View,并且在呈现View时枚举查询时将执行该查询。视图呈现应该很快,并且不会被调用数据库阻止。 .ToList()会避免这种情况,并强制在控制器中执行查询,而View将在内存中提供数据,以便快速呈现......

希望它能回答你的问题。

编辑:有一点需要注意......在某些情况下,例如在使用OData APIs with WebAPI构建API时,您实际上想要返回查询而非物化列表。原因是,在将过滤的数据返回给调用者之前,您希望在该查询之上构建Framework。换句话说,在实际呈现视图(序列化数据 - 通常不是HTML)之前,框架会为您做更多的工作。

答案 1 :(得分:0)

执行第一行后,employees集合将不会加载到内存中(延迟加载)。首次访问集合时会加载它。当您调用ToList()时,将强制将集合加载到内存中。

用法基于内存限制和速度之间的权衡。从内存中访问比延迟加载更快。