Linq to sql 到底是不是延迟加载?怎么看现象?

CCDDzclxy 2019-08-27 09:09:52
RT
初入 Linq to sql 的坑,这里面的东西还不太理解,想来问下。
举个例子:

private void Button_Click(object sender, RoutedEventArgs e)
{
DataClasses1DataContext dc = new DataClasses1DataContext();
Console.WriteLine("dc.DeferredLoadingEnabled : {0}", dc.DeferredLoadingEnabled);// 这里打印出来是 true

var qa = from p in dc.table1 select p;
qa = qa.Where(p => (p.t1 < 5));
List<table1> list = qa.ToList();
Console.WriteLine("list.Count : {0}", list.Count);
}


数据库 里面是下面这个样子:


就这个例子,我和同事 发生了 不同的意见:
意见一:我说 应该是 延迟加载,到使用 “qa.ToList();” 的时候才做sql查询,只有 一条SQL语句,select出来 3条记录。
意见二:但是不同意见是 ,在 调试模式中,执行完“var qa = from p in dc.table1 select p;”看qa的结果视图,是 5条记录,如下图,于是就说 linq是将 所有记录全部取回到内存,然后再做 where的条件筛选。



想问问 上面 两种意见,哪个正确?最好能 讲一下原理理由
请大家帮忙指点下
任何 意见、代码、链接、资料 都可以,欢迎提供 相关材料,先 谢过大家了 !!








...全文
326 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBodhi. 2019-09-21
  • 打赏
  • 举报
回复
添加监视器看下 执行计划,2个时间 比较下。
快乐起航2020 2019-09-20
  • 打赏
  • 举报
回复
断点 加 sqlprofiler监视
CCDDzclxy 2019-08-27
  • 打赏
  • 举报
回复
引用 8 楼 听雨停了 的回复:
最简单的就是启用数据库跟踪了,调试代码,看看具体数据库执行的啥sql就知道了。
sql server的话,就是 SQL Server Profiler了吧?
听雨停了 2019-08-27
  • 打赏
  • 举报
回复
最简单的就是启用数据库跟踪了,调试代码,看看具体数据库执行的啥sql就知道了。
CCDDzclxy 2019-08-27
  • 打赏
  • 举报
回复
引用 6 楼 wanghui0380 的回复:
来 https://blog.csdn.net/ma_jiang/article/details/53065809 这是俺们程序员自己扩展的非vs自带可视化编辑器,你看他贴的代码,其中的 xxxx as xxxx,也就是是告诉你,这个编辑内部可以有代码的,这个代码可以去执行的,所以他要展示一个linq,可以去展示结果,当然也可以去展示生成的表达式树(ps:这种展示linq生成的表达式树的第3方可视化编辑器其实很早就有,只是不太常用,我已经忘了叫啥了)
多谢兄台详细的回复
wanghui0380 2019-08-27
  • 打赏
  • 举报
回复
来 https://blog.csdn.net/ma_jiang/article/details/53065809 这是俺们程序员自己扩展的非vs自带可视化编辑器,你看他贴的代码,其中的 xxxx as xxxx,也就是是告诉你,这个编辑内部可以有代码的,这个代码可以去执行的,所以他要展示一个linq,可以去展示结果,当然也可以去展示生成的表达式树(ps:这种展示linq生成的表达式树的第3方可视化编辑器其实很早就有,只是不太常用,我已经忘了叫啥了)
CCDDzclxy 2019-08-27
  • 打赏
  • 举报
回复
感谢大家
正怒月神 2019-08-27
  • 打赏
  • 举报
回复
无论意见1还是意见2, 你只要去看 ,当他们是IQueryable<T>时,那就是还没执行。 当他们是IEnumerable<T>时,那就是执行了。
wanghui0380 2019-08-27
  • 打赏
  • 举报
回复
那玩意的正式名称叫“可视化调试器”----目的就是让你看的,比如你可以自己扩展一个Image的可视化调试器,也可以自己扩展一个json的可视化调试器(展示一下比如jsonTree,你写的json的时候有tree么,没有。但人家展示给你的,可以带tree展示,也就是你看到只是人家想展示的,不是他实际上运行的)
wanghui0380 2019-08-27
  • 打赏
  • 举报
回复
那就没见过,vs在你展开的时候提示“接收超时”么 东西是给你看的,你想看人家就给你看,难道你点展开,微软不让你看,提示你“对不起少年,请先tolist么”
  • 打赏
  • 举报
回复
调试模式下查看相当于是输出结果。你用sql server profiler 工具监视一下什么时刻执行sql语句就有结果了。逐行调试查看是否有sql语句生成就可以了。
  • 打赏
  • 举报
回复
IQueryable就是延迟执行……
听雨停了 2019-08-27
  • 打赏
  • 举报
回复
引用 9 楼 CCDDzclxy 的回复:
[quote=引用 8 楼 听雨停了 的回复:] 最简单的就是启用数据库跟踪了,调试代码,看看具体数据库执行的啥sql就知道了。
sql server的话,就是 SQL Server Profiler了吧?[/quote] 是的

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧