使用带有LINQ to Entities的foreach时需要ToList

Chr*_*ris 7 c# linq linq-to-entities entity-framework

我有一个性能问题,关于LINQ如何与foreach来自Entity Framework的可查询实体一起执行.

这样做是否更好(也更快)

foreach(var thing in myentities.GetThemAll())
Run Code Online (Sandbox Code Playgroud)

要么

foreach(var thing in myentities.GetThemAll().ToList())
Run Code Online (Sandbox Code Playgroud)

第一个例子是否实际上会导致myentities.GetThemAll().Count()(+1?)跳转到数据库,每个收集一行?

Chr*_*tos 8

如果你只需要迭代你的元素就不要打电话,那就更好了ToList().这是因为当我们调用它时,会立即执行相应的查询,并创建内存集合中的一个.

如果不进行调用ToList,则将避免创建将保存查询结果的内存集合.

要么你按照第一种方式,要么第二种方式,你将进行一次往返数据库.

  • @Chris请注意接受的答案下的第一条评论,"整个集合是在首次使用枚举器时获取的." 当我们使用`foreach`时,我们会得到一个"枚举器",它将帮助我们迭代我们所拥有的序列元素. (2认同)