请问为什么我加不加 `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回答

阿莱克斯刘

2021-02-04

访问数据库的变量是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



1
1
KyungLee
非常感谢老师指点!
2021-02-04
共1条回复

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

978 学习 · 547 问题

查看课程