最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# DataTable與Model互轉(zhuǎn)的示例代碼

 更新時間:2020年12月04日 14:20:47   作者:李志強  
這篇文章主要介紹了C#DataTable與Model互轉(zhuǎn)的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
/// <summary>
 /// 實體轉(zhuǎn)換輔助類
 /// </summary>
 public class ModelConvertHelper<T> where T : new()
 {
  /// <summary>
  /// List泛型轉(zhuǎn)換DataTable.
  /// </summary>
  public DataTable ListToDataTable<T>(List<T> items)
  {
   var tb = new DataTable(typeof(T).Name);

   PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

   foreach (PropertyInfo prop in props)
   {
    Type t = GetCoreType(prop.PropertyType);
    tb.Columns.Add(prop.Name, t);
   }

   foreach (T item in items)
   {
    var values = new object[props.Length];

    for (int i = 0; i < props.Length; i++)
    {
     values[i] = props[i].GetValue(item, null);
    }

    tb.Rows.Add(values);
   }

   return tb;
  }

  /// <summary>
  /// model轉(zhuǎn)換DataTable
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="items"></param>
  /// <returns></returns>
  public DataTable ModelToDataTable<T>(T items)
  {
   var tb = new DataTable(typeof(T).Name);

   PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

   foreach (PropertyInfo prop in props)
   {
    Type t = GetCoreType(prop.PropertyType);
    tb.Columns.Add(prop.Name, t);
   }


   var values = new object[props.Length];

   for (int i = 0; i < props.Length; i++)
   {
    values[i] = props[i].GetValue(items, null);
   }

   tb.Rows.Add(values);


   return tb;
  }

  /// <summary>
  /// Determine of specified type is nullable
  /// </summary>
  public static bool IsNullable(Type t)
  {
   return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
  }

  /// <summary>
  /// Return underlying type if type is Nullable otherwise return the type
  /// </summary>
  public static Type GetCoreType(Type t)
  {
   if (t != null && IsNullable(t))
   {
    if (!t.IsValueType)
    {
     return t;
    }
    else
    {
     return Nullable.GetUnderlyingType(t);
    }
   }
   else
   {
    return t;
   }
  }

  /// <summary>
  /// DataTable轉(zhuǎn)換泛型List
  /// </summary>
  /// <param name="dt"></param>
  /// <returns></returns>
  public static List<T> DataTableToList(DataTable dt)
  {
   // 定義集合
   List<T> ts = new List<T>();

   // 獲得此模型的類型
   Type type = typeof(T);
   string tempName = "";
   foreach (DataRow dr in dt.Rows)
   {
    T t = new T();
    // 獲得此模型的公共屬性
    PropertyInfo[] propertys = t.GetType().GetProperties();
    foreach (PropertyInfo pi in propertys)
    {
     tempName = pi.Name; // 檢查DataTable是否包含此列

     if (dt.Columns.Contains(tempName))
     {
      // 判斷此屬性是否有Setter
      if (!pi.CanWrite) continue;

      object value = dr[tempName];
      if (value != DBNull.Value)
       pi.SetValue(t, value, null);
     }
    }
    ts.Add(t);
   }
   return ts;
  }


  public static T DataTableToModel(DataTable dt)
  {
   // 定義實體
   T t = new T();

   // 獲得此模型的類型
   Type type = typeof(T);
   string tempName = "";

   foreach (DataRow dr in dt.Rows)
   {

    // 獲得此模型的公共屬性
    PropertyInfo[] propertys = t.GetType().GetProperties();
    foreach (PropertyInfo pi in propertys)
    {
     tempName = pi.Name; // 檢查DataTable是否包含此列

     if (dt.Columns.Contains(tempName))
     {
      // 判斷此屬性是否有Setter
      if (!pi.CanWrite) continue;

      object value = dr[tempName];
      if (value != DBNull.Value)
       pi.SetValue(t, value, null);
     }
    }
    break;
   }
   return t;
  }
 }

以上就是C#DataTable與Model互轉(zhuǎn)的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C#DataTable與Model互轉(zhuǎn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實現(xiàn)格式化文本并導(dǎo)入到Excel

    C#實現(xiàn)格式化文本并導(dǎo)入到Excel

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實現(xiàn)格式化文本并導(dǎo)入到Excel,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-05-05
  • WPF實現(xiàn)播放RTSP視頻流

    WPF實現(xiàn)播放RTSP視頻流

    這篇文章主要為大家詳細(xì)介紹了WPF實現(xiàn)播放RTSP視頻流的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • C#實現(xiàn)員工ID卡的識別功能

    C#實現(xiàn)員工ID卡的識別功能

    這篇文章主要為大家詳細(xì)介紹了C#如何實現(xiàn)識別員工ID卡的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 解決C# X64應(yīng)用程序中讀取WParam溢出的問題

    解決C# X64應(yīng)用程序中讀取WParam溢出的問題

    C#應(yīng)用程序是AnyCPU的,在一段處理鼠標(biāo)滾輪WM_MOUSEWHEEL的代碼里碰到溢出的問題OverflowException
    2013-04-04
  • Unity的AssetPostprocessor之Model函數(shù)使用實戰(zhàn)

    Unity的AssetPostprocessor之Model函數(shù)使用實戰(zhàn)

    這篇文章主要為大家介紹了Unity的AssetPostprocessor之Model函數(shù)使用實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C#中獲取各種文件名的實現(xiàn)方式

    C#中獲取各種文件名的實現(xiàn)方式

    這篇文章主要介紹了C#中獲取各種文件名的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • c#.net多線程編程教學(xué)——線程同步

    c#.net多線程編程教學(xué)——線程同步

    c#.net多線程編程教學(xué)——線程同步...
    2007-04-04
  • C# 顯示、隱藏窗口對應(yīng)的任務(wù)欄

    C# 顯示、隱藏窗口對應(yīng)的任務(wù)欄

    WPF中全屏窗口,會自動隱藏任務(wù)欄,那非全屏窗口如何隱藏任務(wù)欄?甚至有沒有一種場景,隱藏任務(wù)后自定義一套系統(tǒng)任務(wù)欄來顯示?這篇文章主要介紹了C# 顯示、隱藏窗口對應(yīng)的任務(wù)欄,需要的朋友可以參考下
    2021-10-10
  • C#窗體控件DataGridView常用設(shè)置

    C#窗體控件DataGridView常用設(shè)置

    這篇文章主要為大家詳細(xì)介紹了C#窗體控件DataGridView常用10項設(shè)置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#簡單實現(xiàn)發(fā)送socket字符串

    C#簡單實現(xiàn)發(fā)送socket字符串

    這篇文章主要為大家詳細(xì)介紹了C#簡單實現(xiàn)socket字符串發(fā)送,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論

尼木县| 望城县| 武冈市| 临湘市| 长治市| 辽中县| 兰坪| 商南县| 吉木乃县| 阆中市| 临邑县| 高青县| 嘉黎县| 湖北省| 电白县| 兴隆县| 吉隆县| 诏安县| 沙雅县| 民权县| 屯留县| 讷河市| 乐山市| 泰来县| 新巴尔虎右旗| 五指山市| 中阳县| 西宁市| 闸北区| 平潭县| 会宁县| 衢州市| 孝昌县| 乡宁县| 罗源县| 龙川县| 康马县| 永顺县| 兰坪| 安仁县| 仪陇县|