だから、私はデータベース上にあるアプリケーションを持っています。これまでのところ、クエリの結果はすべて次のような DataTable オブジェクトになりました。
DataTable data = new DataTable();
data.Load(someQuery.ExecuteReader());
ここで、データを厳密に型指定されたオブジェクトのリストにロードしたいと考えています。このようなもの:
List<MyClass> data = someQuery.Load<MyClass>();
ただし、そのメソッドを最初に作成したときは、DataTable.Load(IDataReader) メソッドよりも実行速度がほぼ 3 倍遅くなりました。基本的に、ユーザー GetConstructor(null).Invoke(null) を作成してオブジェクトを作成し、 PropertyInfo.SetValue(reader.GetValue()) を使用してデータを入力しました。
これを行うより良い方法はありますか?
使用した方法:
public List<T> LoadData<T>(DbCommand query)
{
Type t = typeof(T);
List<T> list = new List<T>();
using (IDataReader reader = query.ExecuteReader())
{
while (reader.Read())
{
T newObject = (T)t.GetConstructor(null).Invoke(null);
for (int ct = 0; ct < reader.FieldCount; ct++)
{
PropertyInfo prop = t.GetProperty(reader.GetName(ct));
if (prop != null)
prop.SetValue(newObject, reader.GetValue(ct), null);
}
list.Add(newObject);
}
}
return list;
}