Подтвердить что ты не робот

Выбор многомерного массива в LINQ

У меня есть задача, когда мне нужно перевести DataTable в двумерный массив. Это достаточно легко сделать, просто перейдя по строкам и столбцам (см. Пример ниже).

private static string[,] ToArray(DataTable table)
{
    var array = new string[table.Rows.Count,table.Columns.Count];

    for (int i = 0; i < table.Rows.Count; ++i)
        for (int j = 0; j < table.Columns.Count; ++j)
            array[i, j] = table.Rows[i][j].ToString();

    return array;
}

Что бы я хотел сделать, так это использовать оператор select в LINQ для создания этого 2D-массива. К сожалению, похоже, что в LINQ нет способа выбрать многомерный массив. Да, я знаю, что я могу использовать LINQ для выбора массива с зубчатым контуром, но это не то, что я хочу.

Является ли мое предположение правильным, или есть способ использовать LINQ для выбора многомерного массива?

4b9b3361

Ответ 1

Я не думаю, что это возможно. Мое рассуждение состоит в том, что Выбрать, а большинство других функций LINQ требуют, чтобы коллекции, в которых они работают, реализовали не менее IEnumerable<T> для некоторого T:

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, TResult> selector
)

Прямоугольный массив не реализует IEnumerable<T> для любого T, поэтому он не может быть возвратным значением функции Select.