Лучший способ получить таблицу данных с различными типами столбцов в массив строк - PullRequest
0 голосов
/ 08 июня 2010

Это должно быть легко, похоже, я слишком запутался.

Я получаю таблицу из базы данных, диапазон значений данных от varchar до int до значений Null. Дешевый и грязный способ преобразования этого в файл с разделителями табуляции, который у меня уже есть, заключается в следующем (уменьшенный для экономии места, уродство сохраняется наравне с оригиналом):

da.Fill(dt)
' da - DataAdapter '
' dt - DataTable '
Dim lColumns As Long = dt.Columns.Count
Dim arrColumns(dt.Columns.Count) As String
Dim arrData(dt.Columns.Count) As Object

Dim j As Long = 0
Dim arrData(dt.Columns.Count) As Object

For i = 0 To dt.Rows.Count - 1

    arrData = dt.Rows(i).ItemArray()

    For j = 0 To arrData.GetUpperBound(0) - 1
        arrColumns(j) = arrData(j).ToString
    Next

  wrtOutput.WriteLine(String.Join(strFieldDelimiter, arrColumns))

  Array.Clear(arrColumns, 0, arrColumns.GetLength(0))
  Array.Clear(arrData, 0, arrData.GetLength(0))
Next

Это не только уродливо и неэффективно, но и действует мне на нервы. Кроме того, я хочу, если возможно, избежать позорной двойной петли через стол. Я был бы очень признателен за чистый и безопасный способ переписать эту часть.

Мне нравится подход, который используется здесь - особенно он пытается решить ту же проблему, что и я, но он терпит неудачу, когда я применяю его к своему делу напрямую.

1 Ответ

0 голосов
/ 09 июня 2010

Вы должны быть в состоянии сделать так:

File.WriteAllText( _
  fileName, _
  String.Join( _
    Environment.NewLine, _
    dt.Rows.Cast(Of DataRow)().Select( _
      Function(r) String.Join( _
        ",", _
        r.ItemArray().Select(Function(o) o.ToString()).ToArray() _
      ) _
    ).ToArray() _
  ) _
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...