Преобразование значений, допускающих значение NULL, в DataTable в C#: методы и примеры кода

В C# при работе с данными вы можете встретить значения, допускающие значение NULL, которые необходимо преобразовать в DataTable. В этой статье блога мы рассмотрим различные методы решения этой задачи, а также приведем примеры кода, иллюстрирующие каждый подход.

Метод 1: использование цикла и свойства Nullable.HasValue

public static DataTable ConvertNullableValuesToDataTable<T>(IEnumerable<T?> values) where T : struct
{
    DataTable dataTable = new DataTable();

    foreach (T? value in values)
    {
        dataTable.Rows.Add(value.HasValue ? (object)value.Value : DBNull.Value);
    }

    return dataTable;
}

Использование:

List<int?> nullableIntegers = new List<int?> { 1, 2, null, 4, null };
DataTable resultDataTable = ConvertNullableValuesToDataTable(nullableIntegers);

Метод 2: использование LINQ и метода Nullable.GetValueOrDefault

public static DataTable ConvertNullableValuesToDataTable<T>(IEnumerable<T?> values) where T : struct
{
    DataTable dataTable = new DataTable();

    values.Select(value => value.GetValueOrDefault())
          .ToList()
          .ForEach(value => dataTable.Rows.Add(value));

    return dataTable;
}

Использование:

List<double?> nullableDoubles = new List<double?> { 1.5, null, 3.7, null, 5.2 };
DataTable resultDataTable = ConvertNullableValuesToDataTable(nullableDoubles);

Метод 3: использование отражения и метода Nullable.GetUnderlyingType

public static DataTable ConvertNullableValuesToDataTable<T>(IEnumerable<T> values)
{
    DataTable dataTable = new DataTable();
    Type underlyingType = Nullable.GetUnderlyingType(typeof(T));
    dataTable.Columns.Add("Value", underlyingType);
    foreach (T value in values)
    {
        dataTable.Rows.Add(value == null ? DBNull.Value : value);
    }
    return dataTable;
}

Использование:

List<DateTime?> nullableDates = new List<DateTime?> { DateTime.Now, null, DateTime.UtcNow, null };
DataTable resultDataTable = ConvertNullableValuesToDataTable(nullableDates);

В этой статье мы рассмотрели три различных метода преобразования значений, допускающих значение NULL, в DataTable на C#. Каждый метод обеспечивает уникальный подход к обработке значений, допускающих значение NULL, и может использоваться в зависимости от ваших конкретных требований. Используя эти методы, вы можете гарантировать, что ваши значения, допускающие значение NULL, будут правильно представлены в DataTable, что позволит беспрепятственно манипулировать и анализировать данные.

Не забудьте выбрать метод, который лучше всего соответствует вашим потребностям и типу данных, с которыми вы работаете. Приятного кодирования!