I have the following collection
var stageTable = new List<Stage>
{
new Stage {StageId = 1, LifecycleId = 1, StageSeqNo = 1},
new Stage {StageId = 2, LifecycleId = 1, StageSeqNo = 2},
new Stage {StageId = 3, LifecycleId = 1, StageSeqNo = 3},
new Stage {StageId = 4, LifecycleId = 1, StageSeqNo = 4},
new Stage {StageId = 5, LifecycleId = 2, StageSeqNo = 1},
new Stage {StageId = 6, LifecycleId = 2, StageSeqNo = 2},
new Stage {StageId = 7, LifecycleId = 2, StageSeqNo = 3},
new Stage {StageId = 8, LifecycleId = 2, StageSeqNo = 4},
};
and I'm trying to build a query that returns the next Stageone given by a currentStage, but contained in the same subset that is defined LifecycleId, for example, given currentStage = 2, I would expect to receive Stagefrom stageId = 3back, but with currentStage = 4I expect to get nullback, since it LifecycleIdswitches to a value 2.
This is what I have
var lifecycleId = stageTable
.Where(x => x.StageId == currentStageId)
.Select(x => x.LifecycleId);
var nextStage = stageTable
.Where(s => s.LifecycleId == lifecycleId.First())
.SkipWhile(s => s.StageId != currentStageId)
.Skip(1).FirstOrDefault();
It seems to work, but is there a way to accomplish this in a single request?