首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OrderBy().ToList() vs. ().OrderBy()

OrderBy().ToList() vs. ().OrderBy()
EN

Stack Overflow用户
提问于 2012-12-11 11:22:33
回答 3查看 15.4K关注 0票数 9

我正在寻找以下LINQ表达式的确认/澄清:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var context = new SomeCustomDbContext()

// LINQ to Entities?
var items  = context.CustomItems.OrderBy(i => i.Property).ToList();

// LINQ to Objects?
var items2 = context.CustomItems.ToList().OrderBy(i => i.Property);
  1. 我是否正确地认为第一种方法是LINQ to Entities,其中EF构建了一个更具体的要传递的SQL语句,将排序工作放在数据库上?

  1. 第二个方法是LINQ to Objects,其中LINQ将整个集合拖到内存中( ToList()枚举?)在订购之前,这样将负担留给服务器端(在这种情况下是web服务器)? 如果是这样的话,我可以很快地看到L2E将是有利的情况(例如。在将集合拖入内存之前对它们进行筛选/修剪)。

  1. 但是,我是否应该知道其他的细节/权衡,或者“方法2”可能比第一种方法更有利的时候?

更新:

假设我们没有使用EntityFramework,只要底层存储库/数据源实现IQueryable<T>,这仍然是正确的,对吗?如果不是,这两条语句都会导致内存中的LINQ to Objects操作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-11 11:27:23

  1. 是。
  2. 是。
  3. 是。

正确的是,调用ToList()会迫使linq到实体计算结果并将其作为列表返回。正如您所怀疑的,这可能会带来巨大的性能影响。

在有些情况下,linq到实体无法解析看起来非常简单的查询(如Where(x => SomeFunction(x)))。在这些情况下,您通常别无选择,只能调用ToList()并对内存中的集合进行操作。

针对您的最新情况:

ToList()总是强迫它前面的所有东西立即评估,而不是延迟执行。举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
someEnumerable.Take(10).ToList();

vs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
someEnumerable.ToList().Take(10);

在第二个示例中,在使用前10个元素之前,必须执行对someEnumerable的任何延迟工作。如果someEnumerable正在做一些劳动强度很大的事情(比如使用Directory.EnumerateFiles()从磁盘读取文件),这可能会产生非常真实的性能影响。

票数 11
EN

Stack Overflow用户

发布于 2012-12-11 11:28:17

我是否正确地认为第一种方法是LINQ实体,其中EF构建了要传递的更具体的SQL语句,将排序工作放在数据库上?

是LINQ对象的第二个方法,其中LINQ将整个集合拖到内存中.在订购之前把负担留给服务器端.?

但是,我是否应该知道其他的细节/权衡,或者“方法2”可能比第一种方法更有利的时候?

在很多情况下,方法1是不可能的--通常是当您有一个不能直接转换为SQL的复杂筛选器或排序顺序时(或者更合适的情况下,EF不支持直接SQL转换)。另外,由于不能通过线路传输延迟加载的IQueryable,所以任何时候必须序列化结果时,都必须首先用ToList()或类似的方法来实现它。

票数 3
EN

Stack Overflow用户

发布于 2012-12-11 12:02:04

需要注意的另一件事是,IQueryable不能保证(a)底层提供者的语义推理,或者(b)提供者实现了多少IQueryable方法。

例如:-

  1. EF不支持Last()。
  2. 它也不支持将DateTimes与有效的T进行时间部分比较.
  3. 它不支持子查询中的FirstOrDefault()。

在这种情况下,您需要将数据带回客户端,然后执行客户端的进一步评估。

您还需要了解它如何解析LINQ管道以生成(在EF情况下)T。因此,有时您必须仔细考虑如何构造LINQ查询,以便生成有效的T。

尽管如此,IQueryable<>在.NET框架中是一个非常强大的工具,值得更多地熟悉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13827004

复制
相关文章
用Python进行单元测试
Python编程语言,不仅仅在机器学习、数据分析等领域大放异彩,在web开发中等软件开发中,使用者也越来越多。
老齐
2021/04/19
3.2K0
用Python进行单元测试
对 React 组件进行单元测试
前端开发的一个特点是更多的会涉及用户界面,当开发规模达到一定程度时,几乎注定了其复杂度会成倍的增长。
江米小枣
2020/06/16
4.3K0
用MockMvc对Spring mvc中的controller层进行单元测试
参考:http://sishuok.com/forum/posts/list/7981.html  ;  http://www.tuicool.com/articles/6nqeIbm
克虏伯
2019/04/15
2.6K0
[译] 对 Vue-Router 进行单元测试
原文:https://medium.com/js-dojo/unit-testing-vue-router-1d091241312
江米小枣
2020/06/15
2.2K0
如何对机器学习代码进行单元测试?
本文介绍了一种用于机器学习代码的单元测试方法,通过生成数据输入、模型推理、损失计算和优化等步骤,来确保每个组件只在一个步骤中起作用。作者还提供了相应的测试用例和代码示例,以帮助读者更好地理解单元测试的实现过程。同时,作者也提醒读者,单元测试并非万能的,需要结合其他测试方法来全面评估机器学习代码的性能和正确性。
企鹅号小编
2018/01/09
2.5K0
如何对机器学习代码进行单元测试?
如何对 Jenkins 共享库进行单元测试
Jenkins 共享库是除了 Jenkins 插件外,另一种扩展 Jenkins 流水线的技术。通过它,可以轻松地自定义步骤,还可以对现有的流水线逻辑进行一定程度的抽象与封装。至于如何写及如何使用它,读者朋友可以移步附录中的官方文档。
LinuxSuRen
2019/05/29
2.2K0
ASP.NET Core 对Controller进行单元测试
单元测试对我们的代码质量非常重要。很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试。我所在的公司没见过一个对Controller写过测试的。今天来演示下如果对Controller进行单元测试。以下内容默认您对单元测试有所了解,比如如何mock一个接口。在这里多叨叨一句,面向接口的好处,除了能够快速的替换实现类(其实大部分接口不会有多个实现),最大的好处就是可以进行mock,可以进行单元测试。
MJ.Zhou
2020/06/23
2K0
对 WordPress 主题进行单元测试(Theme Unit Test)
在制作 WordPress 的过程中,除了对整体的结构等进行排版布局等,还必须要对正文的内容和其他地方进行修饰和排版,例如正文中可能出现的 标题(h2、h3)、列表(ul、ol)、表格(table) 以及不同的文章类型效果等等。这就是 WordPress 主题的单元测试(Theme Unit Test)。
Denis
2023/04/15
1.9K0
用程序对hdfs进行操作。
调试加安装了半天,怎么也没有配置好怎么通过Eclipse直接连接hdfs,最后我还是打成一个jar包放到Linux虚拟机中执行的。
用户5166556
2019/04/16
4620
用QUnit对Razor进行测试
Given how central JavaScript is to many modern web applications,  it is important to use unit tests to drive the design and quality of that JavaScript. But I’ve noticed that there are a lot of developers that don’t know where to start.
javascript.shop
2019/09/04
6350
用QUnit对Razor进行测试
如何对Spring MVC中的Controller进行单元测试
对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试。 具体来讲,是由Spring框架中的spring-test模块提供的实现,详见MockMvc。
编程随笔
2022/04/29
2.3K0
用LogParser对IIS 日志进行分析
LogParser 是一个命令行工具,可以通过SQL 语句对日志进行分析统计,LogParser功能非常的强大,不但可以分析IIS日志,还可以分析系统事件日志,CSV,XML等格式日志,同时LogParser还支持编程接口,LogParser的帮助文档里自带了一个使用C#查询系统日志的例子。下面给出LogParser的下载地址。 基本的用法如下: LogParser –i:输入文件的格式 –o:输出格式 “SQL语句” 例如下面的例子是用Log Parser统计访问整个IIS站点的IP,及访问次数: log
张善友
2018/01/30
1.9K0
如何对类中的protected方法进行单元测试
也许很多同学写单元测试时遇到这样的问题,一个类方法是 protected ,如何测呢 ? 当然,你可以说把 protected 改成 public 就可测了!没错,是可测了,可是 ......
跑马溜溜的球
2020/12/07
4K0
用Prometheus对业务服务进行监控
这里分享一个用于黑盒监控的blackbox_exporter, 可以用于对http,https,tcp,dns以及ICMP协议进行探测,从而抓取数据进行监控。但是,这些对于我们来说究竟能解决什么用处。
公众号: 云原生生态圈
2021/11/15
1.7K0
用Prometheus对业务服务进行监控
用ranger对hive metastore 进行授权管理
hive standalone metastore 3.1.2可作为独立服务,作为spark、flink、presto等服务的元数据管理中心,然而在现有的hive授权方案中只有针对hiveserver2的授权,所以本文针对hive standalone metastore独立服务使用ranger对连接到hive metastore的用户进行授权访问,以解决hive standalone metastore无权限验证问题。
从大数据到人工智能
2022/01/15
1.8K0
用ranger对hive metastore 进行授权管理
用Python对MySQL同步状态进行监
使用Python对MySQL数据库服务器是否可访问,及主从同步是否中断进行监控,是一件非常简单的事情。感谢Python给我们带来了如此简单,强大,快捷的开发环境。
py3study
2020/01/08
9700
点击加载更多

相似问题

用Jest对EventEmitter进行单元测试

13

用MrUnit对作业进行单元测试

12

用ICommand对NSubstitute进行单元测试

11

用超时对HttpClient进行单元测试

10

用Rebus对CorrelationId进行单元测试

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文