我第一次使用.NET中的Entity Framework工作,并且一直在编写LINQ查询以便从我的模型中获取信息.我想从一开始就养成良好的习惯,所以我一直在研究编写这些查询的最佳方法,并得到他们的结果.不幸的是,在浏览Stack Exchange时,我似乎遇到了延迟/立即执行如何与LINQ一起使用的两个相互矛盾的解释:
在LINQ查询中显示有问题的慢foreach() - ToList()极大地提升了性能 - 为什么会这样?,暗示需要调用"ToList()"以便立即评估查询,因为foreach正在重复评估数据源上的查询,从而大大减慢了操作.
另一个例子是问题通过分组linq结果进行预测非常缓慢,任何提示?,其中接受的答案还暗示在查询上调用"ToList()"将提高性能.
显示有问题foreach只执行一次查询吗?,暗示foreach导致建立一个枚举,并且每次都不会查询数据源.
继续浏览网站已经出现了许多问题,其中"在foreach循环中重复执行"是性能问题的罪魁祸首,还有很多其他答案表明foreach将从数据源中适当地获取单个查询,这意味着两者都是解释似乎有效.如果"ToList()"假设不正确(因为美国东部时间2013-06-05 1:51 PM的大部分当前答案似乎都暗示),这种误解来自何处?这些解释中是否有一个是准确的,哪个不是,或者是否存在可能导致LINQ查询以不同方式进行评估的不同情况?
编辑:除了下面接受的答案之外,我对程序员提出了以下问题,这非常有助于我对查询执行的理解,特别是在循环期间可能导致多个数据源命中的陷阱,我认为对这个问题感兴趣的人有用:https://softwareengineering.stackexchange.com/questions/178218/for-vs-foreach-vs-linq