一个查询优化的LinQ最大日期

Nec*_*net 9 linq linq-to-entities entity-framework

我有以下代码:

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;
Run Code Online (Sandbox Code Playgroud)

不过我一直试图找到优化它的方法,制作一个查询而不是一个......任何消化?

Mar*_*ers 18

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

initialBalance = ctx.DailyBalances
   .OrderByDescending(c => c.DailyDate)
   .Select(c => c.FinalBalance)
   .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

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

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