我自己写了一个模仿hibernate的组件,但实现查询功能的时候不知道如何把IDataReader返回的值填充到一个实体类的集合中(IList类型的集合),如有一个实体类User包括几个属性有Name,Address等然后查询出来填充到IList集合中,也就是说IList集合中包含了多个User,而这些User是从IDataReader中读取出来后再经过程序控制转换成一个个User对象填充进去类似于Hibernate.高手请指点...

解决方案 »

  1.   

    通过反射,得到User的属性列表,然后根据属性中的每一个属性名称,去IDataReader取对应的值,如果存在就获得对应的值,不存在返回
     Type t = o.GetType();
                    PropertyInfo[] properties = t.GetProperties();                for (int i = 0; i < properties.Length; i++)
                    {
    string value=string.Empty;
                          if(dr["properties[i].Name.ToString()"]!=null)
    value=dr["properties[i].Name.ToString()"].Tostring();
     properties[i].SetValue(o, value, null);
    }
      

  2.   

    User newUser = new User();
    while (datareader.Read())
    {
    反射出newUser的各属性,通过datareader["newUser属性名"]取值,取到的值给newUser
    }
      

  3.   

    User newUser = new User();
    while (datareader.Read())
    {
    反射出newUser的各属性,通过datareader["newUser属性名"]取值,取到的值给newUser
    }
      

  4.   

    先把reader的数据一行一行的读出来.读一行给你的实体赋值,然后把实体add到你的集合中,直把所有的数据全读完.
      

  5.   

    while (datareader.Read()) 

    User u = new User();
    //..然后赋值
    //赋完值后
    你的集合类.Add(u);
    }
      

  6.   

    用反射赋值,参看下面简单例子:public class Program
        {        static void Main(string[] args)
            {
                StuInfoEntity obj = new StuInfoEntity();
                Type t = typeof(StuInfoEntity);            PropertyInfo[] myPropertyInfo;
                // Get the properties of 'Type' class object.
                myPropertyInfo = t.GetProperties();
                for (int i = 0; i < myPropertyInfo.Length; i++)
                {
                    myPropertyInfo[i].SetValue(obj, i.ToString(), null);
                    Console.WriteLine(myPropertyInfo[i].GetValue(obj,null));
                }             
                Console.ReadKey();           
            }
        }    public class StuInfoEntity
        {
            public string a, b, c;
            public string A
            {
                set
                {
                    a = value;
                }
                get
                {
                    return a;
                }
            }        public string B
            {
                set {
                    b = value;
                }
                get
                {
                    return b;
                }
            }        public string C
            {
                set
                {
                    c = value;
                }
                get
                {
                    return c;
                }
            }
        }
    }
      

  7.   

    最好不要用反射赋值.其实你把reader的各列用索引或列名取出来直接赋给实体类的属性即可.