2017-11-08 2 views
0

환자의 일정을 기록하는 일정표가 있습니다. 현재 (현재 일정), 이전 일정 (마지막으로 예약 된 시간) 및 다음 일정을 검색하려고합니다. 이전 및 다음Linq에서 현재, 이전 및 다음 일정 잡기

Id uniqueindentifier 
PatientId uniqueindentifier 
Start datetime 
End datetime 
Remarks varchar 

현재이 시작 열을 기반으로한다 일정

같은 일정 테이블의 구조입니다. 시작 날짜는 언제든지 가능합니다 (연속적이지 않음).

내 방식 :

가 효율적이거나 더 나은 옵션을 사용할 수있는 경우 내가 알고 싶은
db.DbContext.Schedules.Where(i => DbFunctions.TruncateTime(i.Start) == today && i.PatientId==patientId).Take(1) 
    .Union(ctx.DbContext.Schedules.Where(i => DbFunctions.TruncateTime(i.Start) < today && i.PatientId == patientId).OrderByDescending(d => d.Start).Take(1)) 
    .Union(ctx.DbContext.Schedules.Where(i => DbFunctions.TruncateTime(i.Start) > today && i.PatientId == patientId).OrderBy(d => d.Start).Take(1)) 

.

+0

를 사용 할 수있다? –

+0

지금까지 어떤 시도를 했습니까? – Pleun

+0

Entity Framework 6.0 – Nitesh

답변

0

더 나은 방법은이 일정을 사용하여 수행 할 작업에 따라 다릅니다.

해결 방법 중 하나는 현재 어떤 일정이 Today, Previous, Next인지 알 수 없지만 아마도 그 중 하나 일 필요는 없습니다.

당신이 그것을 알고해야하는 경우

은 하나 개의 솔루션은 사용 어떤 ORM 익명 형식 대신

var schedule = db.DbContext.Schedules.Select(x => new { 
    Today = x.Where(i => DbFunctions.TruncateTime(i.Start) == today && i.PatientId==patientId).Take(1), 
    Previous = x.Where(i => DbFunctions.TruncateTime(i.Start) < today && i.PatientId == patientId).OrderByDescending(d => d.Start).Take(1), 
    Next = x.Where(i => DbFunctions.TruncateTime(i.Start) > today && i.PatientId == patientId).OrderBy(d => d.Start).Take(1) 
}); 
+0

컴파일 시간 오류가 발생합니다. – Nitesh