c# – 在此代码中返回相同结果但不同SQL的LINQ方法的执行顺序.到底是怎么回事?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在此代码中返回相同结果但不同SQL的LINQ方法的执行顺序.到底是怎么回事?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2109字,纯文字阅读大概需要4分钟。
内容图文
![c# – 在此代码中返回相同结果但不同SQL的LINQ方法的执行顺序.到底是怎么回事?](/upload/InfoBanner/zyjiaocheng/909/d217f2d736444b248d443a60e0e2c597.jpg)
所以,这是我的代码:
注意这里的ToList()方法的位置,它是IEnumerable,逐行比较.
Customers.ToList().Where(m=>m.ID > 3).OrderByDescending(m=>m.Name).FirstOrDefault();
Customers.Where(m=>m.ID > 3).ToList().OrderByDescending(m=>m.Name).FirstOrDefault();
Customers.Where(m=>m.ID > 3).OrderByDescending(m=>m.Name).ToList().FirstOrDefault();
让我们逐行完成:
Customers.ToList().其中??(m => m.ID> 3)
.OrderByDescending(M => m.Name).FirstOrDefault()
> .ToList() – 可枚举
> .Where() – 可数
> .OrderByDescending() – 可枚举
> .FirstOrDefault – 可枚举
Customers.Where(m => m.ID> 3).ToList()
.OrderByDescending(M => m.Name).FirstOrDefault()
> .Where() – 可查询
> .ToList() – 可枚举
> .OrderByDescending() – 可枚举
> .FirstOrDefault() – 可枚举
Customers.Where(m => m.ID> 3).OrderByDescending(m => m.Name)
.ToList().FirstOrDefault()
> .Where() – 可查询
> .OrderByDescending() – 可查询
> .ToList() – 可枚举
> .FirstOrDefault() – 可枚举
现在,这是他们的SQL,按顺序:
SELECT [t0].[ID], [t0].[Name] FROM [Customer] AS [t0] GO
SELECT [t0].[ID], [t0].[Name] FROM [Customer] AS [t0] WHERE [t0].[ID]
SELECT TOP (1) [t0].[ID], [t0].[Name] FROM [Customer] AS [t0] WHERE
[t0].[ID] > @p0 ORDER BY [t0].[Name] DESC
似乎line1获取ENTIRE集合并将其传递给线路,而line3只获得一个实体.
根据SQL输出,我可以推断:
第1行:内存密集型代码;由于线路中传递了更多数据,因此需要更多带宽;
第3行:数据库密集型代码;由于线路中传递的数据较少,因此需要较少的带宽
我很好奇每行代码之间内部发生了什么.它们相对类似,我得到了相同的结果.
究竟在这里发生了什么(在C#及其功能的内部?)?
解决方法:
像.Where()和.OrderBy()这样的方法使用延迟执行,这意味着它们在调用时所做的就是修改查询的表达式树 – 它们不会导致查询被执行.底层查询仅在被某些内容枚举时执行(例如,通过对其进行操作).
另一方面,.ToList()旨在返回查询结果的内存中列表,也就是说,它实际上导致查询被执行.它在概念上类似于执行类似以下伪代码的操作
foreach (item in query)
list.add(item)
在您的示例中,查询由.ToList()执行,从那时起您正在执行新查询,这次是针对内存中的集合.
因此,在第一个示例中,Customers查询它由ToList()立即执行,.Where()和.OrderBy()只是使用Linq to objects查询提供程序修改一个新的表达式树,并执行此Linq to objects查询由FirstOrDefault().
内容总结
以上是互联网集市为您收集整理的c# – 在此代码中返回相同结果但不同SQL的LINQ方法的执行顺序.到底是怎么回事?全部内容,希望文章能够帮你解决c# – 在此代码中返回相同结果但不同SQL的LINQ方法的执行顺序.到底是怎么回事?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。