【问题标题】:Create Extension Method for classes with same structure and different number of columns为具有相同结构和不同列数的类创建扩展方法
【发布时间】:2012-02-15 06:11:42
【问题描述】:

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

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

例如 sp 2 具有这种复杂类型:

sp2_result
{
      string c1;
      string c2;
}

等等。我想将这个复杂结果的列表转换为DataTable,但它们的列数不同,但它们的类型相同。我怎样才能为此写一个Extension Method

谢谢

【问题讨论】:

    标签: c# entity-framework c#-4.0 extension-methods


    【解决方案1】:

    利用反射创建DataTable形成对象的List集合...

            /// <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;
            }
    

    【讨论】:

    • 非常感谢。但是CreateTable&lt;T&gt;(); 是什么?我想从我的类列构建我的 DataTable
    • 应该将(IList&lt;T&gt; pList) 转换为(this IList&lt;T&gt; pList) 吗?
    • @Rozhin - 嘿方法获取对象列表,即集合并从它生成 DataTable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2016-01-25
    相关资源
    最近更新 更多