我有以下代码:
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;
尽管如此,我一直试图找到优化它的方法,制作一个查询而不是一个...任何消化?
答案 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))。