C#—Table To list 和 List To Table 操作1.using System.Reflection;//常规的命名空间,省略...2.PositionList类结构 public class PositionList { public int position_id{get;set;} public string position_full_name{get;set;} public int job_id{get;set;} public int order_id{get;set;} public Boolean no_homepage{get;set;} public string job_status_display_name{get;set;} }3. 实体转换辅助类 Table To List 和 List To Table方法 /// <summary> /// -Table To List /// </summary> public IList<PositionList> ConvertToModel(DataTable dt) {
IList<PositionList> ts = new List<PositionList>();// 定义集合 Type type = typeof(PositionList); // 获得此模型的类型 string tempName = ""; foreach (DataRow dr in dt.Rows) { PositionList t = new PositionList(); PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性 foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (dt.Columns.Contains(tempName)) { if (!pi.CanWrite) continue; object value = dr[tempName]; if (value != DBNull.Value) pi.SetValue(t, value, null); } } ts.Add(t); } return ts; }
/// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list">集合</param> /// <returns></returns> public DataTable ToDataTable(IList list) { DataTable result = new DataTable(); if (list.Count > 0) { PropertyInfo[] propertys = list[0].GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { result.Columns.Add(pi.Name, pi.PropertyType); }
for (int i = 0; i < list.Count; i++) { ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in propertys) { object obj = pi.GetValue(list[i], null); tempList.Add(obj); } object[] array = tempList.ToArray(); result.LoadDataRow(array, true); } } return result; }4.调用方式://其中dt_Position为得到的DataTable数据,因为这边需求只需获取1条IList<PositionList> list_Position = ConvertToModel(dt_Position);dvPositionList.DataSource = ToDataTable((from u in list_Position select u).Skip(1).Take(1).ToList());dvPositionList.DataBind();