当前位置:  开发笔记 > 编程语言 > 正文

DataTable to List <T>转换

如何解决《DataTabletoList<T>转换》经验,为你挑选了1个好方法。

有没有比以下更好的方法?

特别是,我想Activator用其他东西替换.

public static List ToList(DataTable dt)
        {
            Type type = typeof(T);

            List list = new List();

            foreach (DataRow dr in dt.Rows)
            {
                object[] args = new object[1];

                args[0] = dr;

                list.Add((T)Activator.CreateInstance(type, args));
            }

            return list;
        }

Joel Coehoor.. 6

我想提到的第一件事是你可能不需要列表.赔率是,IEnumerable足够了.即使你确实需要一个列表,将IEnumerable转换为列表也是微不足道的.

考虑到这一点,这段代码是实现它的一种很好的通用方法:

public static IEnumerable ToEnumerable(DataTable dt, Func translator)
{
    foreach(DataRow dr in dt.Rows)
    {
       yield return translator(dr);
    }
}

希望你能看到它的可重用性.您需要做的就是提供一个知道如何将单个DataRow转换为T类型的函数.该函数可能使用Activator,但它不必.它可能只使用普通的构造函数并设置一些属性.



1> Joel Coehoor..:

我想提到的第一件事是你可能不需要列表.赔率是,IEnumerable足够了.即使你确实需要一个列表,将IEnumerable转换为列表也是微不足道的.

考虑到这一点,这段代码是实现它的一种很好的通用方法:

public static IEnumerable ToEnumerable(DataTable dt, Func translator)
{
    foreach(DataRow dr in dt.Rows)
    {
       yield return translator(dr);
    }
}

希望你能看到它的可重用性.您需要做的就是提供一个知道如何将单个DataRow转换为T类型的函数.该函数可能使用Activator,但它不必.它可能只使用普通的构造函数并设置一些属性.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有