1
このlinq文を最適化してパフォーマンスを向上させてください。通過するドライバは約4000台あり、ページがタイムアウトします。あなたがAny()
を使用する必要があるときは、Count() > 0
を使用しているこのlinq文を最適化するには
tblDriver driver = Mapper.Map<Domain.Driver, tblDriver>(driverDto);
var entries = (from e in driver.tblDriverLogEntries
where e.OccuredAt <= utcEnd &&
e.OccuredAt >= utcViolationsStart &&
e.tblDriverStatusChanges.Where(x => !x.RemovedAt.HasValue).Count() > 0
select e).Union(
//previous amended status
(from e in driver.tblDriverLogEntries
where e.tblDriverStatusChanges.Where(s => !s.RemovedAt.HasValue).Count() > 0
&& e.OccuredAt < utcViolationsStart
orderby e.OccuredAt descending
select e).Take(1).Union(
//next amended status
(from e in driver.tblDriverLogEntries
where e.tblDriverStatusChanges.Where(s => !s.RemovedAt.HasValue).Count() > 0
&& e.OccuredAt > utcEnd
orderby e.OccuredAt ascending
select e)
)
);
あなたは本当にサブクエリーを別々に書いておき、最後にそれらを組み合わせるべきです。少なくとも管理しやすくする必要があります。 –
何のために最適化しますか?読みやすさ、パフォーマンス、メモリ消費量、または何かを忘れてしまったことがありますか? –
少なくとも1つのフルフィルが常にあることを確かめてください: "e.OccuredAt