DataTable to List <T>转换

use*_*312 2 c# datatable generic-list

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

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

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

            List<T> list = new List<T>();

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

                args[0] = dr;

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

            return list;
        }
Run Code Online (Sandbox Code Playgroud)

Joe*_*orn 6

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

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

public static IEnumerable<T> ToEnumerable<T>(DataTable dt, Func<DataRow, T> translator)
{
    foreach(DataRow dr in dt.Rows)
    {
       yield return translator(dr);
    }
}
Run Code Online (Sandbox Code Playgroud)

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