gpt4 book ai didi

c# - 鉴于我们只想要第一条记录,在 linq 查询中选择之前排序是否更好?

转载 作者:行者123 更新时间:2023-11-30 20:40:10 25 4
gpt4 key购买 nike

 var myVar = context.Sessions .Where(s => somesConditions)session.EquipmentId
.Select(s => s.StartDateTime)
.OrderBy(s => s)
.FirstOrDefault();

在上面的查询中,选择前先排序会不会更好?

  • 可读性

    没什么区别。

  • 表现

    一个比另一个好吗?

编辑: 我知道这个例子是有缺陷的,因为查询可以用一个简单的 Min() 代替。尽管如此,表现得好像不是这样。

最佳答案

如果您通过 EF 将其发送到 RDBMS,则没有区别,因为您的 RDBMS 会选择它喜欢的执行计划,并将单个结果发回给您。将投影移动到排序步骤之前或之后都没有区别。

内存中 LINQ 的情况不一样:虽然 Select 从引用对象集合中投影现有值或现有对象时几乎没有任何区别,但这并不总是案例。

具体来说,如果您从一组非常大的 struct 开始,情况就会有所不同。在这种情况下,您最好在排序之前使用 Select 投影一个小字段以获得更好的性能。

如果您投影到一个新对象中,情况也会发生变化,因为这样做会创建需要在排序后立即进行垃圾回收的临时对象。

请注意,将投影延迟到调用 FirstOrDefault 之后,您可以从不可为空的属性生成可空对象:

var myVar = context.Sessions .Where(s => somesConditions)
.OrderBy(s => s.StartDateTime)
.FirstOrDefault()
?.Select(s => s.StartDateTime);

假设 StartDateTime 是一个 DateTime,这个查询将产生一个可为空的 DateTime? 作为结果,而不是 DateTime 使用默认值。

关于c# - 鉴于我们只想要第一条记录,在 linq 查询中选择之前排序是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33660412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com