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

时间:2010-11-02 15:40:28

标签: 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;

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

1 个答案:

答案 0 :(得分:18)

使用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))。