linq - Recursively remove items from Tree -


i have treeview following structure:

var mytree = myrepository.gettree(); 

where object folder structured in way:

public class folder {    public string name { get; set; }    public list<folder> folders { get; set; }    public folder parent { get; set; } } 

assuming repository returning me structure:

myfolder    -mychild01    -mychild02       -mysubchild01           -mychild03       -mysubchild02 

i need recursively read items in tree , if item has name containing '02' have remove item tree. final result should be:

myfolder    -mychild01    -mychild03 

i see how using recursive linq anonymous delegate or recursive function.

there's number of approaches take this.

the easiest thing take functional approach , rebuild tree recursively excluding folders match pattern.

static folder filtered(folder root, func<folder, bool> predicate) {     return new folder     {         name = root.name,         parent = root.parent,         folders = root.folders             .where(predicate)             .select(subfolder => filtered(subfolder, predicate))             .tolist(),     }; }  folder mytree = ...; var filtered = filtered(mytree, f => f.name.contains("02")); 

if whatever reason rather not make new instances of folders rather modify existing instances, adjustments have made still equally simple.

static folder filtered(folder root, func<folder, bool> predicate) {     // make use of removeall() method lists     root.folders.removeall(subfolder => !predicate(subfolder));     foreach (var subfolder in root.folders)     {         filtered(subfolder, predicate);     }     return root; } 

Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -