c# - Using Linq to find next element in subset of a list -


i have following collection

// collection query     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 construct query return next stage given currentstage contained within same subset defined lifecycleid, e.g., given currentstage = 2 expect stage stageid = 3 back, currentstage = 4 expect null since lifecycleid switches value of 2.

this 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 appears work, there way perform in single query?

if install morelinq nuget package use code like:

var currentstageid = 4;  var nextstage = stagetable.skipwhile(z => z.stageid < currentstageid)     .lead(1, (x, y) => new { existing = x, next = y })     .take(1)     .firstordefault(z => z.next?.lifecycleid == z.existing.lifecycleid)?.next;  console.writeline(nextstage?.stageid); 

skipwhile skip data before current row.

lead merge adjacent rows (i.e. put current , next row together).

take 1 ensure single row (representing current , next row together).

and firstordefault ensure null returned if second row not have same lifecycleid first row).


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -