В C# таблицы DataTables обычно используются для хранения табличных данных и управления ими. Однако существуют сценарии, в которых вам может потребоваться преобразовать DataTable в объект модели для лучшей организации данных и манипулирования ими. В этой статье мы рассмотрим различные методы преобразования DataTable в модель на C#, а также приведем примеры кода для каждого метода.
Метод 1: использование отражения
Один из подходов к преобразованию DataTable в модель — использование отражения. Этот метод динамически сопоставляет столбцы DataTable со свойствами объекта модели. Вот пример:
public static List<T> ConvertDataTableToModel<T>(DataTable dataTable) where T : new()
{
List<T> models = new List<T>();
foreach (DataRow row in dataTable.Rows)
{
T model = new T();
foreach (DataColumn column in dataTable.Columns)
{
PropertyInfo propertyInfo = model.GetType().GetProperty(column.ColumnName);
if (propertyInfo != null && row[column] != DBNull.Value)
{
propertyInfo.SetValue(model, row[column], null);
}
}
models.Add(model);
}
return models;
}
Метод 2: использование библиотек сопоставления объектов (например, AutoMapper)
Библиотеки сопоставления объектов, такие как AutoMapper, предоставляют удобный способ сопоставления данных одного объекта с другим. Вот пример использования AutoMapper для преобразования DataTable в модель:
public static List<T> ConvertDataTableToModel<T>(DataTable dataTable)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DataRow, T>();
});
IMapper mapper = config.CreateMapper();
List<T> models = mapper.Map<List<T>>(dataTable.AsEnumerable());
return models;
}
Метод 3: сопоставление вручную
В случаях, когда у вас есть сложные сопоставления или определенная бизнес-логика, вы можете вручную сопоставить DataTable с объектом модели. Вот пример:
public static List<T> ConvertDataTableToModel<T>(DataTable dataTable)
{
List<T> models = new List<T>();
foreach (DataRow row in dataTable.Rows)
{
T model = Activator.CreateInstance<T>();
// Map properties manually
model.Property1 = row["Column1"].ToString();
model.Property2 = Convert.ToInt32(row["Column2"]);
// ...
models.Add(model);
}
return models;
}
В этой статье мы рассмотрели различные методы преобразования DataTable в модель на C#. Независимо от того, решите ли вы использовать отражение, библиотеки сопоставления объектов, такие как AutoMapper, или сопоставление вручную, зависит от сложности ваших данных и требований вашего приложения. Преобразуя таблицы DataTable в модели, вы можете улучшить манипулирование данными и их организацию в своих приложениях C#.