Изучение различных методов преобразования DataTable в модель на C#

В 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#.