How to convert the following to C #?

I have the following model

public class Node
    {
        public int AutoIncrementId { get; set; }


        public string Text { get; set; }


        public List<Node> Nodes { get; set; }

          ...//other propeties

     }

I want to convert the data to the following model,

public class TreeView
{    
 public int Id {get; set;}
 public string Text {get; set;}
 public List<TreeView> Items {get; set;}    
}

I started with the following, but then I realized how I would know when to stop?

variable test contains node data

var items = test.Data.Select(x => new TreeViewItemModel
   {
     Id = x.AutoIncrementId.ToString(),
     Text = x.Text,
     Items =   x.Nodes.Select(y=> new TreeViewItemModel(
     {

       Id =  y.AutoIncrementId.ToString(),
       Text =  y.Text,
       Items = //do I keep going? 

     }));    
  }    
);
+4
source share
3 answers

For clarity and simplicity, this works great:

public TreeView ConvertNode(Node rootNode)
{
    var tree = new TreeView
    {
        Id = rootNode.AutoIncrementId,
        Text = rootNode.Text,
        Items = new List<TreeView>()
    };

    if (rootNode.Nodes != null)
    {
        foreach (var node in rootNode.Nodes)
        {
            tree.Items.Add(ConvertNode(node));
        }
    }

    return tree;
}
0
source

You can use recursion for this:

public TreeView ConvertToTreeView(Node node)
{
    TreeView tv = new TreeView();

    tv.Id = node.AutoIncrementId;
    tv.Text = node.Text;
    if (node.Nodes != null && node.Nodes.Count > 0)
    {
        tv.Items = new List<TreeView>();
        node.Nodes.ForEach(x => tv.Items.Add(ConvertToTreeView(x)));
    }

    return tv;
}
+2
source

I prefer this form.

public TreeView ConvertToTreeView(Node node)
{
    return new TreeView
            {

                Id = node.AutoIncrementId;
                Text = node.Text;
                Items = node.Nodes.Select(ConvertToTreeView).ToList()
            };
}

Edit: Yes, Baldrick, I did: P and

public TreeView ConvertToTreeView(Node node)
{
    return new TreeView
            {

                Id = node.AutoIncrementId;
                Text = node.Text;
                Items = node.Nodes != null
                           ? node.Nodes.Select(ConvertToTreeView).ToList()
                           : new List<TreeView>()
            };
}

It just doesn't look so good.

0
source

Source: https://habr.com/ru/post/1530349/


All Articles