优化一次查询中的LinQ最大日期

标签 linq entity-framework linq-to-entities

我有以下代码:

Decimal initialBalance;
DateTime dailyDate = ctx.DailyBalances.Max(c => c.DailyDate);
          if (dailyDate != null)
              initialBalance = ctx.DailyBalances.Where(c => c.DailyDate == dailyDate).Select(c => c.FinalBalance).FirstOrDefault();
            else
                initialBalance = 0;

            return initialBalance;

尽管如此,我一直在尝试优化它的方法,而不是一个查询,而是一个查询...任何建议?

最佳答案

使用OrderByDescending并记录第一条记录:

initialBalance = ctx.DailyBalances
   .OrderByDescending(c => c.DailyDate)
   .Select(c => c.FinalBalance)
   .FirstOrDefault();

这种查询类型在SQL Server中进行了优化,因此不需要整个表的O(n log(n))排序。如果DailyDate上有一个索引,它将找到索引的最后一行,而没有索引,它将使用一种称为 Top N Sort 的优化算法,该算法在线性时间内运行。

但是,此查询在LINQ to Objects中为O(n log(n))。

关于优化一次查询中的LinQ最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079332/

相关文章:

c# - 如何使用我自己的方法或为 EF Core 查询编写 DbFunction (EF Core 3.0)

c# - 如果我附加一个已附加到 EF 中的实体,会发生什么情况?

entity-framework - EntityTypeBuilder 不包含 EF Core 中 ToTable 的定义

entity-framework-4 - 如何将 Entity Framework 中的 DbSet 转换为 ObjectQuery

c# - 帮助将 SQL 转换为 LINQ-to-Entities

c# - 值 '\r\n' 的格式无效 .","ExceptionType":"System. FormatException

c# - 仅将新项目从一个列表添加到另一个列表

c# - 为什么 LINQ to Entities 不能识别某些方法?

c# - 如何优化 linq 查询的速度?

c# - 左连接两个具有特定参数的数据表