无法将列表对象转换为数据表

时间:2017-07-18 10:27:05

标签: c# asp.net-mvc

我有一个JSON对象,我从ajax post调用中获取,我将其映射到我的Customclass对象列表,如下所示。

[ObjectFilter(Param = "postdata", RootType = typeof(List<ExportToExcel8020>))]
        public void ExportToExcel(List<ExportToExcel8020> text) 

{
  //List<ExportToExcel8020> rm = text.AsEnumerable().ToList();
  //DataTable UserDt = rm .ToDataTable();
  DataTable UserDt = text.ToDataTable();
}

这是我的列表对象的外观,

enter image description here

现在我想将此generic list object转换为datatable, 我试图通过使用以下方法来做到这一点。但我得到一个错误,说

  

'System.Collections.Generic.List&LT; ...&Domain.Common.ExportToExcel8020 GT;'不包含'ToDataTable'的定义,也没有扩展方法'ToDataTable'接受类型的第一个参数...

     

'System.Collections.Generic.List&LT; ...&Domain.Common.ExportToExcel8020 GT;'找不到(你错过了使用指令或汇编引用吗?)

public static DataTable ToDataTable<T>(List<T> items)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);

            //Get all the properties
            PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in Props)
            {
                //Setting column names as Property names
                dataTable.Columns.Add(prop.Name);
            }
            foreach (T item in items)
            {
                var values = new object[Props.Length];
                for (int i = 0; i < Props.Length; i++)
                {
                    //inserting property values to datatable rows
                    values[i] = Props[i].GetValue(item, null);
                }
                dataTable.Rows.Add(values);
            }
            //put a breakpoint here and check datatable
            return dataTable;
        }

我需要datatable的原因是使用openxml并导出excel文件。

我的代码有问题吗?或者我的apporach本身是错的?

1 个答案:

答案 0 :(得分:3)

这看起来像是在尝试编写扩展方法。方法签名需要this作为第一个参数的关键字,然后指定要扩展的类型(并在调用扩展方法时传入对象的实例)。尝试

public static DataTable ToDataTable<T>(this List<T> items)

作为方法签名。