В настоящее время у вас есть три операции:
.Where(r => r.Date <= asOfDate)
- временная сложность O (n)
.OrderByDescending(r => r.Date)
- временная сложность (я полагаю) O (n log (n))
.FirstOrDefault();
- временная сложность O (0)
Вы можете сделать следующее, чтобы получить тот же результат:
var maxDate= listObject.Where(r => r.Date <= asOfDate).Max(r => r.date);
- временная сложность O (n)
var result = listObject.FirstOrDefault(r => r.Date == maxDate);
- временная сложность O (n)