using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;

using SCC.Common;

namespace SCC.Services
{
    /// <summary>
    /// 基础服务
    /// </summary>
    public class BaseServices
    {
        /// <summary>
        /// 装箱单个数据对象
        /// </summary>
        /// <typeparam name="T">装箱对象</typeparam>
        /// <param name="dr">装箱数据行</param>
        /// <returns></returns>
        protected T LoadData<T>(DataRow dr)
        {
            if (dr == null) return default(T);
            var t = typeof(T);
            var obj = Activator.CreateInstance(t);
            var properts = t.GetProperties();
            foreach (var pi in properts)
            {
                if (!dr.Table.Columns.Contains(pi.Name)) continue;
                pi.SetValue(obj, CommonHelper.ChangeType(dr[pi.Name], pi.PropertyType), null);
            }
            return (T)obj;
        }

        /// <summary>
        /// 装箱列表数据对象
        /// </summary>
        /// <typeparam name="T">装箱对象</typeparam>
        /// <param name="dt">装箱数据来源表格</param>
        /// <returns></returns>
        protected List<T> LoadDataList<T>(DataTable dt)
        {
            List<T> result = new List<T>();
            var t = typeof(T);
            var properts = t.GetProperties();
            object obj;
            foreach (DataRow dr in dt.Rows)
            {
                obj = Activator.CreateInstance(t);
                foreach (var pi in properts)
                {
                    if (!dt.Columns.Contains(pi.Name)) continue;
                    pi.SetValue(obj, CommonHelper.ChangeType(dr[pi.Name], pi.PropertyType), null);
                }
                result.Add((T)obj);
            }
            return result;
        }
    }
}