我有以下代码:
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/