В объект с неопределенными полями написать значение этих полей - C#
Формулировка задачи:
Постарался все в коде описать!
static class WorkWithDB<T> where T : class, ID//интерфейс ID реализует одно авт. свойсто int id
{
private static string cnStr = ConfigurationManager.ConnectionStrings["cnStr"].ConnectionString;//строка подключения
public static List<T> SelectAll()// функция котороая должна из бд вытащить мне из БД (MS-SQL 2012) с помощью хранимой процедуры все записи
{
List<T> list = new List<T>();//лист такого же типа
Type t= typeof(T);
using (SqlConnection cn = new SqlConnection(cnStr))//строка подключения к БД
{
SqlCommand cmd = new SqlCommand("SelectAll"+t.Name, cn); //название ХП и объект к кот применяется
cmd.CommandType = CommandType.StoredProcedure; //уточняем, что это ХП
cn.Open(); //открываем соединение
IDataReader reader = cmd.ExecuteReader(); //созд. объект для чтения из БД
while (reader.Read())// цыкл в котором поочередно вычитывает то что вернула Хранимая Процедура
{
T obj = (Activator.CreateInstance(t) as T);//тут я создаю объект типа T, хочу положить его в лит. Положить то положил
obj.//а вот тут инициировать его как?
//вот пример рабочего кода
// while (reader.Read())
//{
// list.Add(new Customer { Id=Convert.ToInt32(reader["Id"]),
// Name=reader["NAME"].ToString(),
// Age = Convert.ToInt32(reader["Age"])
// });
//}
//как толкать значения в поля obj если они еще не определены?
list.Add(obj);
}
cn.Close();
}
return list;
}
}
}
Это вообще возможно?
Решение задачи: «В объект с неопределенными полями написать значение этих полей»
textual
Листинг программы
public int Load<T>(ICollection<T> dtoList, string condition = null, string table = null) where T : new()
{
var properties = typeof(T).GetProperties();
var comm = new SqlCommand(BuildSelectQuery(typeof(T), null, condition, table));
var count = 0;
foreach (var reader in ExecuteReader(comm))
{
var dto = new T();
foreach (var pi in properties)
{
var v = reader[pi.Name] != DBNull.Value ? reader[pi.Name] : null;
pi.SetValue(dto, v, null);
}
dtoList.Add(dto);
count++;
}
return count;
}