c# - Merge two or more T in List<T> based on condition -


i have below class:

public class factoryorder     {         public string text { get; set; }         public int orderno { get; set; }             } 

and collection holding list of factoryorders

list<factoryorder>() 

here sample data

factoryorder("apple",20) factoryorder("orange",21) factoryorder("watermelon",42) factoryorder("jackfruit",51) factoryorder("grapes",71) factoryorder("mango",72) factoryorder("cherry",73) 

my requirement merge text of factoryorders orderno in sequence , retain lower orderno merged factoryorder - resulting output

   factoryorder("apple orange",20) //merged apple , orange , retained lower orderno 20     factoryorder("watermelon",42)     factoryorder("jackfruit",51)     factoryorder("grapes mango cherry",71)//merged grapes,mango,cherry , retained lower orderno 71 

i new linq not sure how go this. or pointers appreciated

as commented, if logic depends on consecutive items heavily linq not easiest appoach. use simple loop.

you order them first linq: orders.orderby(x => x.orderno )

var consecutiveordernogroups = new list<list<factoryorder>> { new list<factoryorder>() }; factoryorder lastorder = null; foreach (factoryorder order in orders.orderby(o => o.orderno)) {     if (lastorder == null || lastorder.orderno == order.orderno - 1)         consecutiveordernogroups.last().add(order);     else         consecutiveordernogroups.add(new list<factoryorder> { order });      lastorder = order; } 

now need build list of factoryorder joined names every group. linq , string.join can come in handy:

orders = consecutiveordernogroups     .select(list => new factoryorder      {          text    = string.join(" ", list.select(o => o.text)),         orderno = list.first().orderno // minimum number     })     .tolist(); 

result sample:

http://fs1.directupload.net/images/150619/9bmfc7xk.jpg


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -