人がプロジェクトを開始したときの追跡のようなテーブルがあります。
PersonId
ProjectId
StartDate
linq (linq-to-entities) を使用して、このような結果セットを取得したい
PersonId
ProjectId
StartDate
EndDate
EndDate は次のプロジェクトの StartDate (StartDate で並べ替えた場合) であり、最近のプロジェクトがない場合は null です。
これは私がやったことです:
context.PersonProjects.Select(pp => new {
pp.PersonId,
pp.ProjectId,
pp.StartDate,
EndDate = context.PersonProjects.Where(pp2 => pp2.PersonId == pp.PersonId && pp2.StartDate > pp.StartDate).OrderBy(pp2 => pp2.StartDate).Select(pp2 => pp2.StartDate).FirstOrDefault()
})
これを行うためのよりパフォーマンスの高い方法はありますか?