Итак, у меня есть приложение, которое находится в базе данных. До сих пор результаты моих запросов пошли все в DataTable объекта, как это:Как эффективно создать список объектов внутри универсального метода?
DataTable data = new DataTable();
data.Load(someQuery.ExecuteReader());
Теперь я хочу, чтобы загрузить свои данные в список сильно типизированных объектов. Что-то вроде этого:
List<MyClass> data = someQuery.Load<MyClass>();
Однако мой первый взгляд на написание этого метода в конечном итоге работает почти в три раза медленнее, чем метод DataTable.Load (IDataReader). В принципе, у меня есть пользователь 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;
}
Отражение, без сомнения, медленное. При строго типизированном вы всегда подразумеваете 'MyClass', или может быть любой тип say' T'? Можете ли вы отправить код для загрузки в список сильно типизированных объектов? –
Любой класс может быть использован. Свойства класса должны соответствовать данным, конечно. – Nezreli