百分求答,DataTable转成List

grn0515 2014-07-12 03:31:09
已知有个枚举cType,有个表Tab,有两个实体类 ,一个Parents,一个Childs

public enum cType
{
A,
B,
C

DataTable Tab=new DataTable()
Tab.Columns.Add("id", typeof(System.Int32));
Tab.Columns.Add("name", typeof(System.String));
Tab.Columns.Add("type", typeof(System.String));
DataRow row = Tab.NewRow();
row["id"] = 1;
row["name"] = "11";
row["type"] = "A";
Tab.Rows.Add(row);
row = Tab.NewRow();
row["id"] = 2;
row["name"] = "22";
row["type"] = "A";
Tab.Rows.Add(row);
row = Tab.NewRow();
row["id"] = 3;
row["name"] = "33";
row["type"] = "A";
Tab.Rows.Add(row);
row = Tab.NewRow();
row["id"] = 4;
row["name"] = "44";
row["type"] = "A";
Tab.Rows.Add(row);
row = Tab.NewRow();
row["id"] = 5;
row["name"] = "55";
row["type"] = "B";
Tab.Rows.Add(row);
row = Tab.NewRow();
row["id"] = 6;
row["name"] = "66";
row["type"] = "B";
Tab.Rows.Add(row);
public class Parents
{
public string cname { get; set; }
public List<Childs> child { get; set; }
}
public class Childs{
public string fname { get; set; }
public string fvalue { get; set; }
public string sname { get; set; }
public string svalue { get; set; }
public string tname { get; set; }
public string tvalue { get; set; }
}

求根据枚举类型,DataTable转成Lis,难点是Childs中的fname,sname ,tname 分别代表表中的数据1,2,3行,就是每三行生成一行数据
最后结果:
[{ cname : 'A,
child : [ {fname: "1", fvalue: "11", sname: "2", svalue: "22", tname: "3", tvalue: "33" },
{ fname: "4", fvalue: "44", sname: "",svalue: "" , tname: "", tvalue: ""}]},
{ cname : 'B,
child : [{ fname: "5", fvalue: "55",sname: "6", svalue: "66",tname: "", tvalue: "" }]
}];
...全文
269 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqiucu 2014-07-17
  • 打赏
  • 举报
回复
List<Parents> result = new List<Parents>();
            Parents parent = new Parents();
            int temp = 0;
            string tempValue = "";
            Childs childs = new Childs();
 
            for (int i = 0; i < Tab.Rows.Count; i++)
            {
                cType ct;
                if (Enum.TryParse(Tab.Rows[i]["type"].ToString(), out ct))
                {                    
                    if (tempValue == string.Empty)
                    {                       
                        parent.cname = Tab.Rows[i]["type"].ToString();                        
                        tempValue = Tab.Rows[i]["type"].ToString();
                    }
 
                    if (tempValue == Tab.Rows[i]["type"].ToString() && temp <= 2)
                    {
                        childs = GetChilds(temp % 3, Tab.Rows[i]["id"].ToString(), Tab.Rows[i]["name"].ToString(), childs);
                        temp++;
                    }
 
                    if ((tempValue != Tab.Rows[i]["type"].ToString() && temp <= 2) || (i == Tab.Rows.Count-1))
                    {
                        for (int j = temp; j < 3; j++)
                        {
                            childs = GetChilds(j % 3, "", "", childs);                            
                        }
 
                        if (i != Tab.Rows.Count - 1)
                        {
                            i--;
                        }
                         
                        temp = 3;
                    }
 
                    if (temp == 3)
                    {
                        parent.child.Add(childs);
                        result.Add(parent);
                        temp = 0;
                        tempValue = "";
                        childs = new Childs();
                        parent = new Parents();
                    }
                }
            }

static Childs GetChilds(int temp, string name, string value,Childs childs)
        {
            if (temp == 0)
            {
                childs.fname = name;
                childs.fvalue = value;
            }
            if (temp == 1)
            {
                childs.sname = name;
                childs.svalue = value;
            }
            if (temp == 2)
            {
                childs.tname = name;
                childs.tvalue = value;
            }
 
            return childs;
        }
天空丶蒋 2014-07-17
  • 打赏
  • 举报
回复
你为什么不直接遍历赋值到List呢?这也是转List的一种方法呀!
grn0515 2014-07-16
  • 打赏
  • 举报
回复
木有高手解决嘛?
liqiucu 2014-07-16
  • 打赏
  • 举报
回复

namespace Test
{
    public enum cType
    {
        A,
        B,
        C
    }
    public class Parents
    {
        public string cname { get; set; }
        public List<Childs> child { get; set; }

        public Parents()
        {
            child = new List<Childs>();
        }
    }
    public class Childs
    {
        public string fname { get; set; }
        public string fvalue { get; set; }
        public string sname { get; set; }
        public string svalue { get; set; }
        public string tname { get; set; }
        public string tvalue { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DataTable Tab = new DataTable();
            Tab.Columns.Add("id", typeof(System.Int32));
            Tab.Columns.Add("name", typeof(System.String));
            Tab.Columns.Add("type", typeof(System.String));
            DataRow row = Tab.NewRow();

            row["id"] = 1;
            row["name"] = "11";
            row["type"] = "A";
            Tab.Rows.Add(row);

            row = Tab.NewRow();
            row["id"] = 2;
            row["name"] = "22";
            row["type"] = "A";
            Tab.Rows.Add(row);

            row = Tab.NewRow();
            row["id"] = 3;
            row["name"] = "33";
            row["type"] = "A";
            Tab.Rows.Add(row);

            row = Tab.NewRow();
            row["id"] = 4;
            row["name"] = "44";
            row["type"] = "A";
            Tab.Rows.Add(row);

            row = Tab.NewRow();
            row["id"] = 5;
            row["name"] = "55";
            row["type"] = "B";
            Tab.Rows.Add(row);

            row = Tab.NewRow();
            row["id"] = 6;
            row["name"] = "66";
            row["type"] = "B";
            Tab.Rows.Add(row);

            List<Parents> result = new List<Parents>();
            Parents parent = new Parents();
            int temp = 0;
            string tempValue = "";
            Childs childs = new Childs();

            for (int i = 0; i < Tab.Rows.Count; i++)
            {
                cType ct;

                if (i == 4)
                {

                }

                if (Enum.TryParse(Tab.Rows[i]["type"].ToString(), out ct))
                {                    
                    if (tempValue == string.Empty)
                    {                       
                        parent.cname = Tab.Rows[i]["type"].ToString();                        
                        tempValue = Tab.Rows[i]["type"].ToString();
                    }

                    if (tempValue == Tab.Rows[i]["type"].ToString() && temp <= 2)
                    {
                        childs = GetChilds(temp % 3, Tab.Rows[i]["id"].ToString(), Tab.Rows[i]["name"].ToString(), childs);
                        temp++;
                    }

                    if ((tempValue != Tab.Rows[i]["type"].ToString() && temp <= 2) || (i == Tab.Rows.Count-1))
                    {
                        for (int j = temp; j < 3; j++)
                        {
                            childs = GetChilds(j % 3, "", "", childs);                            
                        }

                        if (i != Tab.Rows.Count - 1)
                        {
                            i--;
                        }
                        
                        temp = 3;
                    }

                    if (temp == 3)
                    {
                        parent.child.Add(childs);
                        result.Add(parent);
                        temp = 0;
                        tempValue = "";
                        childs = new Childs();
                        parent = new Parents();
                    }
                }
            }
        }

        static Childs GetChilds(int temp, string name, string value,Childs childs)
        {
            if (temp == 0)
            {
                childs.fname = name;
                childs.fvalue = value;
            }
            if (temp == 1)
            {
                childs.sname = name;
                childs.svalue = value;
            }
            if (temp == 2)
            {
                childs.tname = name;
                childs.tvalue = value;
            }

            return childs;
        }
    }
}
自己去优化下@@
  • 打赏
  • 举报
回复
http://blog.csdn.net/yanwudingkou/article/details/6218759 把Childs做参数传进去,循环时添加列,我不知道你为什么这么做, 这样datatable跟Childs应该是有个关系存在的吧;
BIRD72sky 2014-07-16
  • 打赏
  • 举报
回复
我能弱弱的说一个最笨的办法么,就是把datatable 循环,然后添加到list里
grn0515 2014-07-14
  • 打赏
  • 举报
回复
引用 1 楼 xuzheng101361 的回复:
select 从表中取出来就是
详细点
grn0515 2014-07-14
  • 打赏
  • 举报
回复
[quote=引用 2 楼 rpwlp888 的回复:] 建MODEL

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

namespace Com
{
    public class Demo
    {
        public Demo()
        {
            List<Parents> list_datamode = new List<Parents>();

            DataTable dt = new DataTable();


            Parents DM = new Parents();
            DM.cname = "A";
            DM.child.Add(new Childs() { fname = "1", fvalue = "11", sname = "2", svalue = "22", tname = "3", tvalue = "33" });
            list_datamode.Add(DM);

            DM = new Parents();
            DM.cname = "B";
            DM.child.Add(new Childs() { fname = "5", fvalue = "55", sname = "6", svalue = "66", tname = "7", tvalue = "77" });
            list_datamode.Add(DM);


             //再把Parents转为json字符就成
             //[{ cname : 'A,
             //  child : [ {fname: "1", fvalue: "11", sname: "2", svalue: "22", tname: "3", tvalue: "33" },
             //               { fname: "4", fvalue: "44", sname: "",svalue: "" , tname: "", tvalue: ""}]},
             //{ cname : 'B,
             //  child : [{ fname: "5", fvalue: "55",sname: "6", svalue: "66",tname: "", tvalue: "" }]
             //}];
             //       }

    }


    public class Parents
    {
        public string cname { get; set; }
        public List<Childs> child { get; set; }
    }
    public class Childs
    {
        public string fname { get; set; }
        public string fvalue { get; set; }
        public string sname { get; set; }
        public string svalue { get; set; }
        public string tname { get; set; }
        public string tvalue { get; set; }
    }
}


/quote] 写死,我也会呢[
蓝色风影 2014-07-12
  • 打赏
  • 举报
回复
建MODEL

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

namespace Com
{
    public class Demo
    {
        public Demo()
        {
            List<Parents> list_datamode = new List<Parents>();

            DataTable dt = new DataTable();


            Parents DM = new Parents();
            DM.cname = "A";
            DM.child.Add(new Childs() { fname = "1", fvalue = "11", sname = "2", svalue = "22", tname = "3", tvalue = "33" });
            list_datamode.Add(DM);

            DM = new Parents();
            DM.cname = "B";
            DM.child.Add(new Childs() { fname = "5", fvalue = "55", sname = "6", svalue = "66", tname = "7", tvalue = "77" });
            list_datamode.Add(DM);


             //再把Parents转为json字符就成
             //[{ cname : 'A,
             //  child : [ {fname: "1", fvalue: "11", sname: "2", svalue: "22", tname: "3", tvalue: "33" },
             //               { fname: "4", fvalue: "44", sname: "",svalue: "" , tname: "", tvalue: ""}]},
             //{ cname : 'B,
             //  child : [{ fname: "5", fvalue: "55",sname: "6", svalue: "66",tname: "", tvalue: "" }]
             //}];
             //       }

    }


    public class Parents
    {
        public string cname { get; set; }
        public List<Childs> child { get; set; }
    }
    public class Childs
    {
        public string fname { get; set; }
        public string fvalue { get; set; }
        public string sname { get; set; }
        public string svalue { get; set; }
        public string tname { get; set; }
        public string tvalue { get; set; }
    }
}


小子哟 2014-07-12
  • 打赏
  • 举报
回复
select 从表中取出来就是

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧