使用通用反射将带有嵌套对象的对象列表转换为大容量复制C#的数据表

时间:2018-07-27 20:44:21

标签: c# list reflection datatable sqlbulkcopy

我找到了此代码段,使您可以在传递到批量副本的列表上使用可枚举的扩展名。

        public static DataTable AsDataTable<T>(this IEnumerable<T> data)
    {
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
        var table = new DataTable();
        foreach (PropertyDescriptor prop in properties)
            table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
        foreach (T item in data)
        {
            DataRow row = table.NewRow();
            foreach (PropertyDescriptor prop in properties)
                row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
            table.Rows.Add(row);
        }
        return table;
    }

我对此事知之甚少,但是我知道这可以将列表转换为数据表,而无需手动将其全部映射,并允许您执行以下操作:

bulkCopy.WriteToServer(companies.AsDataTable());

我的问题是,我在公司对象列表中嵌套了对象,我不相信上面的代码片段会允许我按预期将嵌套的对象读取到数据表中。上面的代码段是否仍会读取嵌套对象,或者我需要对其进行哪些修改?

谢谢!

0 个答案:

没有答案