2017-11-08 6 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

あなたは使用してどのようなORM? –

+0

これまでに何を試しましたか? – Pleun

+0

エンティティフレームワーク6.0 – Nitesh

答えて

0

より良いアプローチは、このスケジュールで後で何をするかによって異なります。

あなたの解決策の1つの問題は、現在どのスケジュールがTodayPreviousNextであるかわからないことですが、おそらくそれも必要ありません。あなたはそれを知る必要がある場合

、1つの解決策は、匿名型を使用している可能性が代わりに

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

関連する問題