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)
)
);
정말 하위 쿼리를 별도로 작성한 다음 끝에 결합해야합니다. 최소한 관리하기 쉬워야합니다. –
무엇을 Optoimize할까요? 가독성, 성능, 메모리 사용량 또는 내가 잊어 버린 것을 잊지 않았습니까? –
항상 적어도 하나의 fullfilling이 있는지 확인하십시오 : "e.OccuredAt