Я заметил, что я как бы делаю то же самое снова и снова и хотел создать более общий метод преобразования строк из данных в определенный класс.Как создать список неизвестных/типичных типов в C#?
Поскольку у меня нет опыта в использовании общих типов, мне трудно понять, как искать то, что я хочу, но я попытаюсь объяснить.
Я создал этот класс:
public class Class1
{
public Guid? Id{ get; set; }
public string Text1{ get; set; }
public string Text2{ get; set; }
public int TheNumber{ get; set; }
}
Затем я выборки данных из базы данных, которая представляет Class1. Я возвращаю результат в виде DataTable. Имена в столбцах datarows точно такие же, как в моем классе, поэтому я, хотя я мог бы каким-то образом использовать их в своем общем методе для создания экземпляров Class1.
На данный момент я создаю экземпляр так:
public static Class1 AssembleClass1(DataTable dtInfo)
{
Class1 obj = null;
if (dtInfo != null)
{
DataRow dr = dtInfo.Rows[0];
obj = new StrategicObjectives();
obj.Id= (Guid)dr["Id"];
obj.Text1 = dr["Id"].ToString();
obj.Text2 = dr["Id"].ToString();
obj.TheNumber = (int)dr["TheNumber"];
}
return obj;
}
Теперь, что я хочу сделать, это создать универсальный метод, который принимает DataTable и тип Class1 (так как у меня много другие классы в моем проекте я хочу иметь возможность сделать то же самое). Затем он должен создать список типов Class1 и выполнить итерацию параметров Class1, найти соответствующую таблицу данных в строке (-ах) данных и присвоить правильное значение datarow правильному параметру Class1. Я думаю, что также нужно проверить тип каждого параметра Class1, чтобы правильно преобразовать тип столбца datarow.
я получил только это далеко сам, но я не знаю, если это правильно, и я не знаю, как дальше ..:
public static List<T> AssembleItem<T>(DataTable dtItems)
{
List<T> items = null;
if (dtItems != null)
{
items = new List<T>();
foreach (DataRow dr in dtItems.Rows)
{
object item = (T)Activator.CreateInstance(typeof(T));
}
}
return items;
}
Я надеюсь, что кто-то может помочь мне с этим, пожалуйста, спросите меня если вам нужна дополнительная информация.
Сначала Вы должны узнать о динамическом ключевого слова, непосредственно излучающих код и CasleProject:..) –
'obj.Text1 = др [ "Id"] ToString();' вы имели в виду 'DR [ "Text1"] ToString() '(' dr ["Text2"] 'соответственно)? – HimBromBeere
Почему бы не использовать простой сопоставитель orm как Dapper - https://github.com/StackExchange/dapper-dot-net – Captain0