【问题标题】:Filter data table and save it into another datatable过滤数据表并将其保存到另一个数据表中
【发布时间】:2017-06-13 01:34:35
【问题描述】:

需要一些工作测试样本,我尝试了其他选项但似乎不起作用。

请看附件图片。

【问题讨论】:

  • 到目前为止你尝试过什么?有代码吗?

标签: c# linq datatable


【解决方案1】:

你需要一个递归的树结构。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            FolderTree tree = new FolderTree();
            tree.BuildTree();
        }
    }
    public class FolderTree
    {
        public static FolderTree root { get; set; }

        public int id { get; set; }
        public List<FolderTree> children { get; set; }

        static DataTable dt { get; set; }

        public void BuildTree()
        {
            dt = new DataTable();
            dt.Columns.Add("FolderID", typeof(int));
            dt.Columns.Add("PARENT_ID", typeof(int));

            dt.Rows.Add(new object[] { 1, 0 });
            dt.Rows.Add(new object[] { 2, 0 });
            dt.Rows.Add(new object[] { 3, 2 });
            dt.Rows.Add(new object[] { 4, 1 });
            dt.Rows.Add(new object[] { 5, 0 });
            dt.Rows.Add(new object[] { 6, 4 });
            dt.Rows.Add(new object[] { 7, 3 });
            dt.Rows.Add(new object[] { 8, 0 });
            dt.Rows.Add(new object[] { 9, 1 });
            dt.Rows.Add(new object[] { 10, 8 });
            dt.Rows.Add(new object[] { 11, 0 });
            dt.Rows.Add(new object[] { 12, 11 });
            dt.Rows.Add(new object[] { 13, 0 });
            dt.Rows.Add(new object[] { 14, 0 });
            dt.Rows.Add(new object[] { 15, 2 });

            root = new FolderTree();
            BuildTreeRecursive(0, root);
        }
        void BuildTreeRecursive(int parentID, FolderTree parent)
        {
            parent.id = parentID;
            foreach(DataRow folder in dt.AsEnumerable().Where(x => x.Field<int>("PARENT_ID") == parentID))
            {
                if (parent.children == null)
                {
                    parent.children = new List<FolderTree>();
                }
                FolderTree child = new FolderTree();
                int childID = folder.Field<int>("FolderID");
                parent.children.Add(child);
                BuildTreeRecursive(childID, child);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    相关资源
    最近更新 更多