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();