PropertyInfo 简单用法

  • 一般用于两个类的数据绑定
  • 如下
    String DefaultDBConnection = "Data Source=111.111.0.111;Initial Catalog=ZMT;User ID=name;Password=pwd";//连接字符串
                DataSet ds = new DataSet();
                using (SqlConnection conn = new SqlConnection(DefaultDBConnection))//开启数据库连接
                {
                    SqlTransaction trans = null;
                    string orgCode = "1=1";
                    string SQL = string.Format(@"select * from instockplan where ISPID=559
                                                select * from InStockPlanDetails where ISPID=559 and @test");
                    conn.Open();
                    trans = conn.BeginTransaction();//打开一个事物
                    SqlCommand cmd = new SqlCommand(SQL, conn);
                    cmd.Parameters.AddWithValue("@test", orgCode);
                    cmd.Transaction = trans;//此次操作绑定当前的事物
                    SqlDataAdapter Da = new SqlDataAdapter(cmd);
                    Da.Fill(ds);//把查询的数据存在ds
                    //var i = 0;
                    //foreach (var item in ds.Tables[0].Rows)
                    //{
                    //    Console.WriteLine(i++);
                    //}
                    trans.Commit();//事物提交
                    conn.Close();//关闭数据库连接
                }
                List<Plan> list = new List<Plan>();
                foreach (DataRow item in ds.Tables[0].Rows)
                {
                    Plan plan = new Plan();
                    Type planAttr = typeof(Plan); //获取当前类属性
                    System.Reflection.PropertyInfo[] planAttrs = planAttr.GetProperties();//获取当前这个类的所有属性
                    foreach (PropertyInfo attr in planAttrs)
                    {
                        if (ds.Tables[0].Columns.Contains(attr.Name))
                            attr.SetValue(plan, item[attr.Name].ToString(), null);//给当前plan对象赋值该字段
                        if (attr.Name == "planDetails"&& ds.Tables[1].Rows.Count>0)//如果子类里边有数据的时候才进去
                        {
                            foreach (DataRow Pitem in ds.Tables[1].Rows)
                            {
                                PlanDetails planD = new PlanDetails();
                                Type planDAttr = typeof(PlanDetails);
                                System.Reflection.PropertyInfo[] planDAttrs = planDAttr.GetProperties();
                                foreach (var attrD in planDAttrs)
                                {
                                    if (ds.Tables[1].Columns.Contains(attrD.Name))
                                        attrD.SetValue(planD, Pitem[attrD.Name].ToString(), null);
                                }
                                plan.planDetails.Add(planD);
                            }
                            
                        }
                    }
                    list.Add(plan);
                }
                foreach (var item in list)
                {
                    Console.WriteLine(item.ISPID);
                }

     

  • 测试类
    public class Plan
        {
            public Plan()
            {
                planDetails = new List<PlanDetails>();
            }
            public string ISPCode { get; set; }
    
            public string ISPStatus { get; set; }
    
            public string ISPID { get; set; }
            
            public List<PlanDetails> planDetails { get; set; }
        }
        public class PlanDetails
        {
            public string ISPDID { get; set; }
    
            public string ISPID { get; set; }
    
            public string SKUNo { get; set; }
        }

     

posted @ 2020-12-10 11:10  龙er飞  阅读(960)  评论(0编辑  收藏  举报