• LmgORM项目 实体类转换器


     LmgORM项目 实体类转换器

      主要包含以下转换 :

    •  使用DbDataReader填充对象.
    •  使用DataSet填充对象.
    •  dataset转实体类
    •  将实体类转换成DataTable
    •  转换IList<T>为List<T>
    •  List<T>转换为ArrayList
      /// <summary>
    /// 实体类转换器
    /// </summary>
    public class TypeConverter
    {
    /// <summary>
    /// 使用SQL填充对象.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="fieldItem"></param>
    /// <param name="reader"></param>
    /// <returns></returns>
    public static ArrayList FillModelForSql<T>(DataItem fieldItem,
    System.Data.Common.DbDataReader reader) where T : new()
    {
    ArrayList resultList
    = new ArrayList();
    Hashtable hashTable
    = fieldItem.DataValueToHashTable();
    while (reader.Read())
    {
    T emptyDataObject
    = new T();
    for (int i = 0; i < reader.FieldCount; i++)
    {
    Object obj
    = reader.GetValue(i);
    if (hashTable[reader.GetName(i).ToString().ToUpper()] != null)
    {
    CommonHelper.Instance.SetProValue
    <T>(emptyDataObject,
    hashTable[reader.GetName(i).
    ToString().ToUpper()].ToString(), obj);
    }
    }
    resultList.Add(emptyDataObject);
    }
    return resultList;
    }
    /// <summary>
    /// 使用SQL填充对象.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="fieldItem"></param>
    /// <param name="reader"></param>
    /// <returns></returns>
    public static ArrayList FillForSql<T>(DataItem fieldItem,
    DataSet dataset) where T : new()
    {
    ArrayList resultList
    = new ArrayList();
    Hashtable hashTable
    = fieldItem.DataValueToHashTable();
    foreach (DataRow dr in dataset.Tables[0].Rows)
    {
    T emptyDataObject
    = new T();
    foreach (DataColumn dc in dr.Table.Columns)
    {
    if (hashTable[dc.ColumnName.ToUpper()] != null)
    {
    CommonHelper.Instance.SetProValue
    <T>(emptyDataObject,
    hashTable[dc.ColumnName.ToUpper()].ToString(), dr[dc.ColumnName]);
    }
    }
    resultList.Add(emptyDataObject);
    }
    return resultList;
    }
    /// <summary>
    /// 使用SQL填充对象.
    /// </summary>
    /// <param name="typeEntity"></param>
    /// <param name="fieldItem"></param>
    /// <param name="reader"></param>
    /// <returns></returns>
    public static ArrayList QueryEntityListForSql(Type typeEntity,
     DataItem fieldItem, System.Data.Common.DbDataReader reader)
    {
    ArrayList resultList
    = new ArrayList();
    Hashtable hashTable
    = fieldItem.DataValueToHashTable();
    while (reader.Read())
    {
    object emptyDataObject = Activator.CreateInstance(typeEntity);
    for (int i = 0; i < reader.FieldCount; i++)
    {
    Object obj
    = reader.GetValue(i);
    if (hashTable[reader.GetName(i).ToString().ToUpper()] != null)
    {
    CommonHelper.Instance.SetProValue(typeEntity, emptyDataObject,
    hashTable[reader.GetName(i).ToString().
    ToUpper()].ToString(), obj);
    }
    }
    resultList.Add(emptyDataObject);
    }
    return resultList;
    }
    /// <summary>
    /// dataset转实体类
    /// </summary>
    /// <typeparam name="T">实体类</typeparam>
    /// <param name="ds">dataset</param>
    /// <returns></returns>
    public static IList<T> FillModel<T>(DataSet ds)
    {
    List
    <T> l = new List<T>();
    T model
    = default(T);
    if (ds.Tables[0].Columns[0].ColumnName == "rowId"){
    ds.Tables[
    0].Columns.Remove("rowId");
    }
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
    model
    = Activator.CreateInstance<T>();
    foreach (DataColumn dc in dr.Table.Columns)
    {
    try
    {
    PropertyInfo pi
    = model.GetType().GetProperty(dc.ColumnName);
    if (dr[dc.ColumnName] != DBNull.Value)
    pi.SetValue(model, dr[dc.ColumnName],
    null);
    else
    pi.SetValue(model,
    null, null);
    }
    catch {
    continue;
    }
    }
    l.Add(model);
    }
    return l;
    }
    /// <summary>
    /// 将实体类转换成DataTable
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="i_objlist"></param>
    /// <returns></returns>
    public static DataTable Fill<T>(IList<T> objlist)
    {
    if (objlist == null || objlist.Count <= 0)
    {
    return null;
    }
    DataTable dt
    = new DataTable(typeof(T).Name);
    DataColumn column;
    DataRow row;
    System.Reflection.PropertyInfo[] myPropertyInfo
    =
     typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
    foreach (T t in objlist)
    {
    if (t == null)
    {
    continue;
    }
    row
    = dt.NewRow();
    for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
    {
    System.Reflection.PropertyInfo pi
    = myPropertyInfo[i];
    string name = pi.Name;
    if (dt.Columns[name] == null)
    {
    column
    = new DataColumn(name, pi.PropertyType);
    dt.Columns.Add(column);
    }
    row[name]
    = pi.GetValue(t, null);
    }
    dt.Rows.Add(row);
    }
    return dt;
    }
    /// <summary>
    /// 转换IList<T>为List<T>
    /// </summary>
    /// <typeparam name="T">指定的集合中泛型的类型</typeparam>
    /// <param name="gbList">需要转换的IList</param>
    /// <returns></returns>
    public static List<T> ConvertIListToList<T>(IList gbList) where T : class
    {
    if (gbList != null && gbList.Count > 1)
    {
    List
    <T> list = new List<T>();
    for (int i = 0; i < gbList.Count; i++)
    {
    T temp
    = gbList[i] as T;
    if (temp != null)
    list.Add(temp);
    }
    return list;
    }
    return null;
    }
    /// <summary>
    /// List<T>转换为ArrayList
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="list"></param>
    /// <returns></returns>
    public static ArrayList GenericToArrayList<T>(List<T> list)
    {
    ArrayList alist
    = new ArrayList();
    foreach (T t in list)
    {
    alist.Add(t);
    }
    return alist;
    }
    }

    作者:罗敏贵
    邮箱:minguiluo@163.com
    QQ群:34178394 建群 主要是寻找志同道合的人士一起学习和讨论自己的所学所思
    出处:http://luomingui.cnblogs.com/
    说明:专注于微软平台项目架构、熟悉设计模式、架构设计、敏捷个人和项目管理。现主要从事WinForm、ASP.NET、等方面的项目开发、架构、管理工作。文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。
    知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。

  • 相关阅读:
    组策略导入导出secedit
    ipad常见错误
    ipad系统路径
    内核操作注册表例子
    WoW64子系统
    win2003 shutdown命令
    regedit 导入注册表
    windbg for CLR
    WM_POWERBROADCAST
    OpenSSL命令
  • 原文地址:https://www.cnblogs.com/luomingui/p/2018480.html
Copyright © 2020-2023  润新知