DataSet类型转换实体

查询DataSet类型无法对每条数据进行循环转换,利用泛型对象使用反射机制将对象相关属性进行自动赋值。

  • 基础调用
DataSet ds = DbHelper.Query(SQL);
if (ds.Tables[0].Rows.Count > 0)
{
    return DataRowToList_List_Genericity<ListData>(ds.Tables[0].Rows);
}
  
//ListData实体
public class ListData
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Sex { get; set; }
    public string Address{ get; set; }
}
  • 泛型List<object>

        /// <summary>
        /// List<object>数据转换-泛型
        /// </summary>
        /// <param name="dataRowCollection"></param>
        /// <returns></returns>
        private List<T> DataRowToList_List_Genericity<T>(DataRowCollection dataRowCollection)
        {
            List<T> list = new List<T>();
            for (int i = 0; i < dataRowCollection.Count; i++)
            {
                T model = Activator.CreateInstance<T>();
                var row = dataRowCollection[i];
                // 获取T属性列表
                var properties = typeof(T).GetProperties();
                foreach (var property in properties)
                {
                    // 判断DataRow是否包含与属性名相同的列
                    if (row.Table.Columns.Contains(property.Name))
                    {
                        // 获取DataRow中与属性名相同的值
                        var value = row[property.Name];
                        // 将值转换为属性的类型
                        var convertedValue = Convert.ChangeType(value, property.PropertyType);
                        // 设置属性的值
                        property.SetValue(model, convertedValue);
                    }
                }
                list.Add(model);
            }
            return list;
        }
  • 泛型Object对象

        /// <summary>
        /// Object数据转换-泛型
        /// </summary>
        /// <param name="dataRowCollection"></param>
        /// <returns></returns>
        private T DataRowToList_Object_Genericity<T>(DataRowCollection dataRowCollection)
        {
            T model = Activator.CreateInstance<T>();
            var row = dataRowCollection[0];
            // 获取T属性列表
            var properties = typeof(T).GetProperties();
            foreach (var property in properties)
            {
                // 判断DataRow是否包含与属性名相同的列
                if (row.Table.Columns.Contains(property.Name))
                {
                    // 获取DataRow中与属性名相同的值
                    var value = row[property.Name];
                    // 将值转换为属性的类型
                    var convertedValue = Convert.ChangeType(value, property.PropertyType);
                    // 设置属性的值
                    property.SetValue(model, convertedValue);
                }
            }
            return model;
        }

 

posted @ 2024-01-30 10:55  无昵称老炮儿  阅读(56)  评论(0编辑  收藏  举报