2011-06-26 4 views
0

IEnumerableをDataTableに変換するリフレクション方法に精通していますが、非常に遅いです! 私は巨大ではないが大量のデータを取得すると、処理が非常に複雑なデータなので、ブラウザの反応が非常に遅くなります。IEnumerable <MyClass>をDataTableに変換するにはどうすればよいですか?

私のパフォーマンスを向上させる必要があります。どうすればいいですか? PS:LazyLoading DataTableをチェックしました。そこにエーテルはありませんでした。誰かが私にそれを行う方法を教えてくれるでしょうか?

ありがとうございます。

答えて

2

詳細については、thisを参照してください。

コアコードサンプルは

public static DataTable ToDataTable<T>(this IEnumerable<T> collection) 
    { 
     DataTable dt = new DataTable(); 
     Type t = typeof(T); 
     PropertyInfo[] pia = t.GetProperties(); 
     //Create the columns in the DataTable 
     foreach (PropertyInfo pi in pia) 
     { 
      if ((pi.PropertyType.IsGenericType)) 
      { 
       Type typeOfColumn = pi.PropertyType.GetGenericArguments()[0]; 
       dt.Columns.Add(pi.Name, typeOfColumn); 
      } 
      else 
       dt.Columns.Add(pi.Name, pi.PropertyType); 
     } 
     //Populate the table 
     foreach (T item in collection) 
     { 
      DataRow dr = dt.NewRow(); 
      dr.BeginEdit(); 
      foreach (PropertyInfo pi in pia) 
      { 
       dr[pi.Name] = pi.GetValue(item, null); 
      } 
      dr.EndEdit(); 
      dt.Rows.Add(dr); 
     } 
     return dt; 
    } 
} 

は、なぜあなたはデータ変換アプリを遅くすることを思いますか?あなたのプロフィールでしたか?

+0

IEnumerableを匿名の理由として受け取ったと言われているように、私の結果をフィルタリングする必要があります。これは、アップグレードする必要がある古いコードです。 – IamStalker

+0

もう一つ、このメソッドはNullable <>をサポートしていません。nullableを取得するには、このメソッドを変更する必要があります。 – IamStalker

+0

WPFアプリケーションで動作するようにコードを少し修正する必要がありましたが、完璧な答えです –

関連する問題