1、OOP 实体与数据库字段转换(注意 此时实体字段必须和数据库中查询的字段列名相同)

list = ModelExtend.GetByDataTablePart<EZRate>(ds.Tables[0]);
 /// <summary>
        /// 实体和DataTable都有的数据才回给实体赋值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <returns></returns>
        public static List<T> GetByDataTablePart<T>(this DataTable data) where T : class, new()
        {
            if (data != null)
            {
                List<T> list = new List<T>();

                foreach (DataRow row in data.Rows)
                {
                    T t = row.GetByDataRowPart<T>();
                    if (t != null)
                    {
                        list.Add(t);
                    }
                }
                return list;
            }
            else
                return null;
        }
/// <summary>
        /// 实体和DataRow都有的数据才回给实体赋值
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="data">数据</param>
        /// <returns></returns>
        public static T GetByDataRowPart<T>(this DataRow data) where T : class, new()
        {
            if (data != null)
            {
                T t = new T();
                PropertyInfo[] properties = GetProperties(typeof(T));

                foreach (PropertyInfo p in properties)
                {
                    if (data.Table.Columns.Contains(p.Name))
                    {
                        object value = data[p.Name] == DBNull.Value ? p.PropertyType.Name.ToLower().Equals("string") ? string.Empty : null : data[p.Name];
                        p.SetValue(t, value, null);
                    }
                }
                return t;
            }
            else
                return null;

        }

2、重载可以用这种方式,不用写两个方法

/// <summary>
        /// 构造产品订单映射
        /// </summary>
        /// <param name="identify">产品订单标识</param>
        /// <param name="supplier">供应商标识</param>
        /// <param name="commodity">产品标识</param>
        /// <param name="items">产品的具体项目(例如:机票)</param>
        public CommodityOrderMapping(string identify, string supplier, string commodity, IEnumerable<string> items = null, String isEmergency="0")
        {
            this.Identify = identify;
            this.Supplier = supplier;
            this.Commodity = commodity;
            this.IsEmergency = isEmergency;
            if (items != null) this._Items.AddRange(items);
        }
//订单映射
                orderMap = new OrderMapping(eco.TOrderId, eco.PurchaseCode,
                           new CommodityOrderMapping[] { new CommodityOrderMapping(eco.FOrderId, eco.SupplierCode, "C1",items: sublist, isEmergency: IsEmagenrcy) });//子订单映射

在方法中赋默认值,例如 items ,isEmergency 在调用时 用 items:sublist isEmergency:IsEmagenrcy .也可以只写 items:sublist。
总结后边两个参数可写可不写,但是必须前面加上名称例如items:sublist 必须加items。


posted on 2013-07-16 15:32  王洪洪  阅读(168)  评论(0编辑  收藏  举报