优化一个查询中的LinQ最大日期
我有以下代码:优化一个查询中的LinQ最大日期,linq,entity-framework,linq-to-entities,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).
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
上有一个索引,它将找到索引中的最后一行,如果没有索引,它将使用一种称为线性时间运行的优化算法
但是,此查询将在LINQ to Objects中为O(n log(n))。此代码编写时没有意义:dailyDate永远不会为null。。。(DateTime不能为空)对不起,你说得对,但我想知道的是,取最大值然后获得平衡的整个问题,你的意思很确定。OrderByDescending(c=>c.DailyDate)。你真是太棒了。