2011-07-08 9 views
2

可能性の重複に一覧 またはIEnumerableを
Convert IEnumerable to DataTableのDataTable

私は拡張メソッドまたはUtilのを通じて、データテーブルにリストまたはIEnumerableを変換したいですクラス。

+1

もっと正確にすることはできますか? Tのインスタンスのプロパティ/フィールドのスナップショットを含む新しいデータテーブルを作成したいのですか、あるいはデータテーブルのような形を通してTのインスタンスを表すプロキシオブジェクトを作成したいのですか? – DarkSquirrel42

+1

なぜこれを正確にしたいのですか?より良い方法があるかもしれません。 – Ryan

答えて

0

次の拡張メソッドを使用して、IEnumerableからデータベースを生成します。 うまくいけば、これは役に立ちます。

 public static DataTable ToDataTable<TSource>(this IEnumerable<TSource> source) 
     { 
      var tb = new DataTable(typeof (TSource).Name); 
      var props = typeof (TSource).GetProperties(BindingFlags.Public | BindingFlags.Instance); 

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

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

       for (var i = 0; i < props.Length; i++) 
       { 
        values[i] = props[i].GetValue(item, null); 
       } 
       tb.Rows.Add(values); 
      } 
      return tb; 
     } 

    public static Type GetCoreType(Type t) 
    { 
     return t != null && IsNullable(t) 
       ? (!t.IsValueType ? t : Nullable.GetUnderlyingType(t)) : t; 
    } 


    public static bool IsNullable(Type t) 
    { 
     return !t.IsValueType || (t.IsGenericType 
       && t.GetGenericTypeDefinition() == typeof(Nullable<>)); 
    }