public List<T> ConvertToList<T>(DataTable dt) where T : new()
        {
            // 定义集合
            List<T> ts = new List<T>();
            // 获得此模型的类型
            Type type = typeof(T);
            string tempName = "";
            // 获得此模型的公共属性
            PropertyInfo[] propertys = type.GetProperties();
            T t = new T();
            foreach (DataRow dr in dt.Rows)
            {
                t = new T();
                foreach (PropertyInfo pi in propertys)
                {
                    tempName = pi.Name;
                    // 检查DataTable是否包含此列
                    if (dt.Columns.Contains(tempName))
                    {
                        // 判断此属性是否有Setter
                        if (!pi.CanWrite) continue;
                        if (dr[tempName] != DBNull.Value)
                            pi.SetValue(t, dr[tempName], null);
                    }
                }
                ts.Add(t);
            }
            return ts;
        }

调用时:

ConvertToList<TreeNodeInt>(ds.Tables[0])

另附上 生成树形结构的简便方法,此处没有使用递归是他的高明之处,可以借鉴。

public class TreeNodeInt
    {
        public int id { get; set; }
        public int? parentId { get; set; }
        public string title { get; set; }
        public string key { get; set; }
        public string longLabel { get; set; }
        public bool isFolder { get; set; }
        public bool isLazy { get; set; }
        public bool expand { get; set; }
        //public bool Select { get; set; }
        public bool unselectable { get; set; }
        public bool hideCheckbox { get; set; }
        public int treeLevel { get; set; }
        public object obj { get; set; }
        public List<TreeNodeInt> children { get; set; }

public static List<TreeNodeInt> ConvertToTree(List<TreeNodeInt> itemList)
        {
            itemList = itemList.OrderBy(p => p.title).ToList();
            var tree = (from i in itemList
                        where i.parentId == null || i.parentId == 0
                        //orderby i.title
                        select new TreeNodeInt
                        {
                            id = i.id,
                            key = i.key,
                            //key = i.id.ToString(),
                            title = i.title,
                            longLabel = i.longLabel,
                            isFolder = i.isFolder,
                            expand = i.expand,
                            isLazy = i.isLazy,
                            //Select = i.Select,
                            unselectable = i.unselectable,
                            hideCheckbox = i.hideCheckbox,
                            treeLevel = i.treeLevel,
                            obj = i.obj
                        }).ToList();
            Queue<TreeNodeInt> queue = new Queue<TreeNodeInt>(tree);

while (queue.Count > 0)
            {
                var node = queue.Dequeue();
                var children = (from i in itemList
                                where i.parentId == node.id && i.id != node.id
                                //let idStr = SqlFunctions.StringConvert((double)i.id).Trim()
                                select new TreeNodeInt
                                {
                                    id = i.id,
                                    parentId = i.parentId,
                                    key = i.key,
                                    //key = i.id.ToString(),
                                    title = i.title,
                                    longLabel = i.longLabel,
                                    isFolder = i.isFolder,
                                    expand = i.expand,
                                    isLazy = i.isLazy,
                                    //Select = i.Select,
                                    unselectable = i.unselectable,
                                    hideCheckbox = i.hideCheckbox,
                                    treeLevel = i.treeLevel,
                                    obj = i.obj
                                }).ToList();
                if (children.Count > 0)
                {
                    node.children = children;
                    foreach (var child in children)
                    {
                        queue.Enqueue(child);
                    }
                }
            }

return tree;
        }
    }

DataTable转化为List的更多相关文章

  1. C#将DataTable转化为List<T>

    C#将DataTable转化为List<T> 在使用三层架构开发一个网站时,希望把DataTable对象转换为List<T>对象,于是在网上找资料,总结一个比较方便的方法来实现 ...

  2. LINQ查询返回DataTable类型[轉]與将DataTable序列化为Json格式【轉】

    (原文地址:http://xuzhihong1987.blog.163.com/blog/static/26731587201101853740294/) LINQ查询返回DataTable类型 在使 ...

  3. C#中DataTable转化为List<T>解析

    在.net项目中使用到DataTable和List<T>集合的地方较多, 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力和灵活性.不会强行对值类型进行装箱和拆箱,或对引用类 ...

  4. DataTable转化为Model

    /// <summary> /// 将DataTable转成Model /// </summary> /// <param name="dt"> ...

  5. 将DataTable格式化为json字符串返回

    一般用于ajax局部刷新的使用比较多,通过查询得到了DataTable数据,要想将数据放回需要将DataTable转换为json格式,以下为转换的调用函数: string json = "& ...

  6. .NET DataTable转化为json格式

    标准的json用“分隔,不用' public static string DataSetToJson(DataTable dt) {        string json = string.Empty ...

  7. 将DataTable转化为json对象

    private string DataTableTojson(DataTable dt)         {              List> list=new List>();    ...

  8. 将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList

    public IList GetModelList(string tablename, string where) { IList list = null; DataTable dataTable = ...

  9. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

随机推荐

  1. Recall(检出率)和 Precision(准确性)

    这两个方面是模式识别和信息检索使用措施值. 浅显易懂的理解,用以下的图片和公式最好只是. 那么 - 召回率R:用检索到相关文档数作为分子.全部相关文档总数作为分母.即R = A / ( A + C ) ...

  2. 复制360于Launcher浮动窗口的屏幕显示内存使用情况(基本版)

    MainActivity如下面: package cc.cc; import android.os.Bundle; import android.view.View; import android.v ...

  3. UI 纯代码实现计算器

    //  MHTAppDelegate.h //  TestCa //  Copyright (c) 2014年 Summer. All rights reserved. #import <UIK ...

  4. CF(427D-Match &amp; Catch)后缀数组应用

    题意:给两个字符串,求一个最短的子串.使得这个子串在两个字符串中出现的次数都等于1.出现的定义为:能够重叠的出现. 解法:后缀数组的应用.从小枚举长度.假设一个长度len合法的话:则一定存在这个样的s ...

  5. 【工具】JAVA 在单元读取文件并比较

    package test20140709; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; ...

  6. java代码 分解EXCEL(一)

    一,service层接口定义: ExcelParseService.java 一,service层接口实现: ExcelParseServiceImpl.java watermark/2/text/a ...

  7. CacheManager

    .Net缓存管理框架CacheManager Cache缓存在计算机领域是一个被普遍使用的概念.硬件中CPU有一级缓存,二级缓存, 浏览器中有缓存,软件开发中也有分布式缓存memcache, redi ...

  8. CI-持续集成(2)-软件工业“流水线”技术实现(转)

    1   概述 持续集成(Continuous Integration)是一种软件开发实践.在本系列文章的前一章节已经对其背景及理论体系进行了介绍.本小节则承接前面提出的理论构想进行具体的技术实现. & ...

  9. Android学习路径(十)怎么会Action Bar堆放在布局

    默认情况下.action bar出如今activity窗体的顶部.稍微降低了activity布局的总空间. 假设你想隐藏或者显示action bar.在这堂用户体验的课程中,你能够通过调用hide() ...

  10. Java爬虫,信息抓取的实现(转)

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...