为具有相同结构和不同列数的类创建扩展方法

本文关键字:创建 方法 扩展 结构 | 更新日期: 2023-09-27 18:24:32

我有一个实体框架数据模式,我在其中插入一些存储过程,并为每个SP创建一个复杂类型。例如,我的sp1有一个复杂的类型:

sp1_result
{
      string c1;
      string c2;
      string c3;
      string c4;
}

例如,sp2具有这种复杂类型:

sp2_result
{
      string c1;
      string c2;
}

等等。我想把这个复杂结果的List转换成DataTable,但它们有不同的列数,但它们的类型是相等的。我该如何为此编写Extension Method

感谢

为具有相同结构和不同列数的类创建扩展方法

它们利用反射并从对象的List集合创建DataTable。。。

        /// <summary>
        /// Converts IList object to Datatable
        /// </summary>
        /// <typeparam name="T"> name of the class - List Type</typeparam>
        /// <param name="pList"> IList object</param>
        /// <returns>Datatable</returns>
        public static DataTable ConvertTo<T>(IList<T> pList)
        {
            DataTable table = CreateTable<T>();
            Type entityType = typeof(T);
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
            foreach (T item in pList)
            {
                DataRow row = table.NewRow();
                foreach (PropertyDescriptor prop in properties)
                {
                    row[prop.Name] = prop.GetValue(item);
                }
                table.Rows.Add(row);
            }
            return table;
        }