zoukankan      html  css  js  c++  java
  • (转载)DataTable与List<T>相互转换

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Linq;
     6 using System.Reflection;
     7 using System.Text;
     8 using System.Threading.Tasks;
     9  
    10 namespace Common
    11 {
    12     public class ModelHelper
    13     {
    14         public static List<T> TableToEntity<T>(DataTable dt) where T : new()
    15         {
    16             List<T> lists = new List<T>();
    17             if (dt.Rows.Count > 0)
    18             {
    19                 foreach (DataRow row in dt.Rows)
    20                 {
    21                     lists.Add(SetVal(new T(), row));
    22                 }
    23             }
    24             return lists;
    25         }
    26  
    27         public static T SetVal<T>(T entity, DataRow row) where T : new()
    28         {
    29             Type type = typeof(T);
    30             PropertyInfo[] pi = type.GetProperties();
    31             foreach (PropertyInfo item in pi)
    32             {
    33                 if (row[item.Name] != null && row[item.Name] != DBNull.Value)
    34                 {
    35                     if (item.PropertyType.IsGenericType && item.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
    36                     {
    37                         Type conversionType = item.PropertyType;
    38                         NullableConverter nullableConverter = new NullableConverter(conversionType);
    39                         conversionType = nullableConverter.UnderlyingType;
    40                         item.SetValue(entity, Convert.ChangeType(row[item.Name], conversionType), null);
    41                     }
    42                     else
    43                     {
    44                         item.SetValue(entity, Convert.ChangeType(row[item.Name], item.PropertyType), null);
    45                     }
    46                 }
    47             }
    48             return entity;
    49         }
    50  
    51         public static DataTable EntityToDataTable<T>(List<T> list) where T : new()
    52         {
    53             if (list == null || list.Count == 0)
    54             {
    55                 return null;
    56             }
    57  
    58             DataTable dataTable = new DataTable(typeof(T).Name);
    59             foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
    60             {
    61                 if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
    62                 {
    63                     Type conversionType = propertyInfo.PropertyType;
    64                     NullableConverter nullableConverter = new NullableConverter(conversionType);
    65                     conversionType = nullableConverter.UnderlyingType;
    66                     dataTable.Columns.Add(new DataColumn(propertyInfo.Name, conversionType));
    67                 }
    68                 else
    69                 {
    70                     dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
    71                 }
    72             }
    73  
    74             foreach (T model in list)
    75             {
    76                 DataRow dataRow = dataTable.NewRow();
    77                 foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
    78                 {
    79                     object value = propertyInfo.GetValue(model, null);
    80                     if (value != null)
    81                     {
    82                         dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
    83                     }
    84                     else
    85                     {
    86                         dataRow[propertyInfo.Name] = DBNull.Value;
    87                     }
    88                 }
    89                 dataTable.Rows.Add(dataRow);
    90             }
    91             return dataTable;
    92         }
    93     }
    94 }
    View Code
  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/hilolin/p/9098343.html
Copyright © 2011-2022 走看看