Может быть проще / более читабельно сделать:
foreach(string s in stringarray)
datatable.Columns.Add(s);
Но вы можете попробовать:
datatable.Columns.AddRange(
stringarray.Select(s=>new DataColumn(s)).ToArray()
);
Проблема с этим последним методом заключается в том, что писать дольше,менее читабелен и менее эффективен, так что это своего рода проигрыш-проигрыш. Проблема обоих этих методов заключается в том, что вы не можете указать тип столбца, если только вы не собираетесь проверять имя и, например, делать любое имя, заканчивающееся на «Time», датой и т. Д.
Лучший способ использования datatable a - это набор данных со строгой типизацией, добавленный в проект, и сами таблицы данных, разработанные во время разработки, с типами столбцов, ограничениями, отношениями, выражениями и т. Д.
В vb.net это было бы что-токак:
DT2.Columns.AddRange(gg.Select(Function(r) new DataColumn(CStr(r("Plant")))).ToArray())
Это еще более нечитаемая мерзость, чем:
For Each r as Thing in gg
DT2.Columns.Add(CStr(r("Plant")))
Итак, мы, наконец, дошли до того, что вы ставите нам актуальную проблему: вы хотитегруппа на заводе, применить агрегирование к другому столбцу, и вы хотите повернуть его, чтобы ваши строки стали столбцами. Это будет примерно так:
'generate a datatable with dummy data
Dim dt As New DataTable()
dt.Columns.Add("Plant")
dt.Columns.Add("SumMe")
dt.Rows.Add("Rose", 1)
dt.Rows.Add("Rose", 2)
dt.Rows.Add("Tulip", 3)
Dim groups = dt.AsEnumerable() _
.GroupBy(Function(r) New With {Key .Plant = CStr(r("Plant"))}) _
.Select(Function(grp) New With {Key grp.Key.Plant, .SumOf = grp.Sum(Function(ro) CInt(ro("SumMe")))})
'for results
Dim dt2 As New DataTable()
dt2.Columns.Add("x")
dt2.Rows.Add("x")
For Each group In groups
dt2.Columns.Add(group.Plant)
dt2.Rows(0)(group.Plant) = group.SumOf
Next group
Я прошел путь foreach;если вы отчаянно хотите использовать AddRange, несмотря на оговорки о проигрыше-проигрыше, о которых упоминалось ранее (и на этот раз это будет еще сложнее, потому что вам придется превратить группирование в массив и добавить столбцы, а затем выполнить его внекоторая форма для хранения значений в результате dt) Я оставлю это в качестве упражнения для вас:)