在这段代码中,是否需要在Select()之后使用ToList()呢?
var names = someStorage.GetItems().Select(x => x.Name).ToList();
var names = someStorage.GetItems().Select(x => x.Name).ToList();
ToList(IEnumerable)方法强制立即执行查询并返回一个包含查询结果的列表。您可以将此方法附加到查询中以获得查询结果的缓存副本,MSDN。
Select()
定义的查询会立即针对数据存储区运行,而 ToList()
方法则导致这一过程立即执行。如果没有 ToList()
,则其执行将被延迟,直到您首次访问 names
变量为止。ToList()
,则每次使用 names
变量时都会针对数据存储区运行查询,而不仅仅是一次,就像使用 ToList()
一样。因此,它也严重依赖于您使用 names
变量的频率(如果只在循环中使用一次,则没有区别,否则 ToList()
更加高效)。ToList()
),则 Select
将运行多次,这可能是您想要的,也可能不是。例如,调用 Count()
,然后执行 foreach
,您将评估查询 两次。对于某些操作(如 DB 调用)可能不太好。 - Ed S.