zoukankan      html  css  js  c++  java
  • DataReader转换为实体的应用

    代码
     ----DataReader转换为实体的泛型类---
            注意 数据库表字段名和实体类相同
            
    public class EntityTranslate
            {
                
    /// 用class关键字表示约束为引用类型
                
    /// 用struct关键字表示约束为值类型
                
    /// new()默认构造函数约束:如果需要在泛型类型内部实例化类型参数的对象,
               
    ///就必须对类型参数加以默认构造函数约束,除此之外别无选择。
              //执行查询返回对象集合 
              public static List<TEntity> Translate<TEntity>(IDataReader reader) where TEntity : classnew() 
                {
                    List
    <TEntity> list = new List<TEntity>();
                    Type entityType 
    = typeof(TEntity);
                    
    //创建实例
                    object entity = Activator.CreateInstance(entityType);
                    List
    <string> attributes = new List<string>();
                    Dictionary
    <string, PropertyInfo> dic = new Dictionary<string, PropertyInfo>();
                    
    foreach (PropertyInfo info in entityType.GetProperties())
                    {
                        dic.Add(info.Name, info);
                    }

                    
    string columnName = string.Empty;
                    
    //object[] attributes = info.GetCustomAttributes(true);
                    while (reader.Read())
                    {
                        TEntity t 
    = new TEntity();
                        
    foreach (KeyValuePair<string, PropertyInfo> attribute in dic)
                        {
                            columnName 
    = attribute.Key;
                            
    int filedIndex = 0;
                            
    while (filedIndex < reader.FieldCount)
                            {

                                
    if (reader.GetName(filedIndex) == columnName)
                                {
                                    attribute.Value.SetValue(t, reader[filedIndex], 
    null);
                                    
    break;

                                }
                                filedIndex
    ++;


                            }
                        }
                        list.Add(t);

                    }
                    
    return list;

                }
            }
          实现代码:
           
    public void ReaderToEntity()
            {
                
    string sql = "select * from T_User";
                IDataReader reader 
    = DAO.GetReader(sql);
                List
    <User> list = EntityTranslate.Translate<User>(reader);
                
    foreach (User user in list)
                {
                    Console.WriteLine(
    "用户ID:" + user.Id.ToString() + " 用户名:" 
                    
    + user.UserName + " 密码:" + user.UserPwd);
                }
                reader.Close();
            }
  • 相关阅读:
    PAT 1088. Rational Arithmetic
    PAT 1087. All Roads Lead to Rome
    PAT 1086. Tree Traversals Again
    PAT 1085. Perfect Sequence
    PAT 1084. Broken Keyboard
    PAT 1083. List Grades
    PAT 1082. Read Number in Chinese
    求最大公因数
    [转载]Latex文件转成pdf后的字体嵌入问题的解决
    [转载]Matlab有用的小工具小技巧
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1706354.html
Copyright © 2011-2022 走看看