请问为什么我加不加 `ToList()` 都不影响运行结果?都可以正常查询。
来源:6-2 【应用】关键词搜索

KyungLee
2021-01-30
在这节课之前,这段代码本来就是没有 .ToList()
的,一样可以正常运行。
源码中的注释描述是
// Summary:
// Creates a System.Collections.Generic.List`1 from an System.Collections.Generic.IEnumerable`1.
这里只说是把一个 IEnumerable
转换为 List
, 没有提到其他的功能。
所以我对老师说的要加上 ToList()
的理由不理解。
写回答
1回答
-
访问数据库的变量是iqueryable,他是延迟执行的,也就是说在程序执行的最后阶段、马上要输出数据的时候才会执行数据的访问操作。所以不加tolist也是可以取得数据的,只不过可能会在controller级别、快要输出数据的时候才会去访问数据库。而我们加上tolist()指的是马上执行,代码执行到tolist的时候马上就去数据库拿数据,这样处理的好处是我们可以人工干预访问数据库的时机,对代码的控制力度会更强。
所以能不能拿到数据跟加不加tolist没有关系,只是访问数据库的时机不一样而已。
参考:
https://www.jianshu.com/p/ff9a4cbeae18
https://blog.csdn.net/peacezhi/article/details/104858168
https://blog.csdn.net/liunianqingshi/article/details/52807241
112021-02-04
相似问题