Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
646 / 474 / 39
Регистрация: 04.11.2013
Сообщений: 1,951

Конвертировать DataTable.Column в String() без цикла

20.05.2016, 16:21. Показов 2623. Ответов 7

Студворк — интернет-сервис помощи студентам
Вроде простая задачка, но я уже 3 дня не могу ее решить. Есть ли простой метод, что-то типа DataTable.Columns(0).ToArray() ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2016, 16:21
Ответы с готовыми решениями:

Convert list to DataTable column
Собственно вопрос как несколько одинаковых по длине списков(List<string>) закинуть в Datatable в качестве колонок, а не строк? ...

Как перевести объект класса string в целое число без использования цикла?
Может, есть для этого какие-то библиотечные методы?

Как конвертировать string текст в string нули-и-единицы и наоборот
Я задавался этой темой ранее, и решил ее, но сейчас свои тараканы, поэтому давайте сначала. Есть строка "Это строка". Надо каждый...

7
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
20.05.2016, 21:11
Proidoha,
На сколько мне известно подобных штатных методов нет. Но для таких расширений (Extension) существует специальный подход. Формируется модуль в котором описываются подобные расширения. При необходимости вы подключаете этот модуль к вашей программе.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Imports System.Runtime.CompilerServices
Module Module1
    ''' <summary>
    ''' возвращает массив строковых представлений поля с индексом jj таблицы tb
    ''' </summary>
    <Extension()>
    Public Function ArrayFromTableCol(ByVal tb As DataTable, ByVal jj As Integer) As String()
        Dim s = (From rr As DataRow In tb.Rows Select rr.Item(jj)).ToArray
        Dim ss() As String = s.[Select](Function(x) x.ToString()).ToArray()
        Return ss
    End Function
'…
End Module
Использование
VB.NET
1
2
3
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    Dim str() As String = tb2.ArrayFromTableCol(0)
End Sub
Причем метод ArrayFromTableCol теперь определяется IntelliSense как доступный для DataTable.

Добавлено через 11 минут
Забыл сказать, что метод ArrayFromTableCol не использует циклы в явном виде, но это совсем не значит, что за этой вывеской нет циклических процедур.
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
20.05.2016, 21:52
А .Cast(Of String).ToArray не подойдет?
0
646 / 474 / 39
Регистрация: 04.11.2013
Сообщений: 1,951
21.05.2016, 01:05  [ТС]
ovva, спасибо, на работе в понедельник опробую.

Yury Komar, я так в первую очередь попытался, что-то у меня не получилось, (по-моему) у DataTable.Columns(0) нету .cast. Оно есть только или у rows, или у всей таблицы.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
21.05.2016, 14:11
Proidoha, ну так наверно вам надо массив значний СТРОК у нужной колонки, это ведь то что вам нужно. Как-то так может быть?
VB.NET
1
DGV.Columns(0).Rows.Cast(Of String).ToArray
навскидку, так как не могу сейчас проверить.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
22.05.2016, 11:57
Непонятное предубеждение в отношении циклов. В решениях подавляющего числа задач они используются (явно или не явно). Та же задача с использованием цикла в явном виде.
VB.NET
1
2
3
4
5
6
7
'поле с индексом 1 имеет тип String
Dim lstr As New List(Of String)
Dim rd As DataTableReader = tb2.CreateDataReader
While rd.Read
    lstr.Add(rd.GetString(1))
End While
Dim str() As String = lstr.ToArray
или
VB.NET
1
2
3
4
5
6
7
'поле с индексом 0 имеет тип Integer
Dim lstr As New List(Of Integer)
Dim rd As DataTableReader = tb2.CreateDataReader
While rd.Read
    lstr.Add(rd.GetInt32(0))
End While
Dim str() As Integer = lstr.ToArray
0
646 / 474 / 39
Регистрация: 04.11.2013
Сообщений: 1,951
22.05.2016, 13:04  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Непонятное предубеждение в отношении циклов
Нет предубеждения. Нет способа - буду делать циклом. Время выполнения общей программы очень большое получается, что-то около 3 минут на таблицу, а у меня их 10. Вот и пытаюсь по-максисмуму оптимизировать.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
22.05.2016, 21:42
Предложенные выше циклы должны выполняться достаточно быстро.

Добавлено через 8 часов 29 минут
В продолжение
VB.NET
1
2
3
4
5
6
7
8
'несколько ускорит процесс запись непосредственно в массив
Dim str(tb2.Rows.Count - 1) As Integer
Dim ii As Integer
Dim rd As DataTableReader = tb2.CreateDataReader
While rd.Read
    str(ii) = rd.GetInt32(0)
    ii += 1
End While
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2016, 21:42
Помогаю со студенческими работами здесь

Ошибка при присвоении argv[1] переменной string. Как конвертировать к типу string?
&quot;call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type&quot; ...

Как конвертировать System::String в std::string?
Как конвертировать system::string в std::string? А лучше сразу system::string в int.

Как конвертировать string в String^
Подскажите пожалуйста. Как конвертировать string в String^ пример или ссылку.

Retrofit 2: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
Здравствуйте всем! Прошу помощи, т.к. много раз упирался в эту проблему, но так ее и не решил (гуглил про LoggingInterceptor() тоже...

Конвертировать в string
Доброго времени суток, к каждому элементу коллекции применяю регулярное выражение и на выходе получаю string, каким образом можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru