Удалить одинарные кавычки из всех ячеек таблицы данных - Создание новой таблицы - Использование LINQ в Vb.Net - PullRequest
1 голос
/ 03 апреля 2009

У меня есть таблица со многими значениями, которые могут иметь одинарные кавычки. Мне нужно создать дубликат таблицы без этих одинарных кавычек. Я не могу изменить исходную таблицу, поскольку мне нужно использовать ее «как есть» позже.

Я сделал это с помощью table.Clone и использовал foreach для циклического перемещения по строкам и столбцам, удаляя одинарные кавычки по мере необходимости, а затем помещая эту новую строку в новую таблицу. Это работает, и это прямо вперед ... но

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

        Dim myResults = From myRow In dtTable _
                    From myItem In myRow.ItemArray _
                    Where TypeOf myItem Is String AndAlso _
                    myItem.ToString.StartsWith("'"c) AndAlso _
                    myItem.ToString.EndsWith("'"c)

Как видите, я далеко не ушел. У меня были проблемы с поиском примеров, которые не смотрели на определенный столбец в DataRow. Похоже, мой код извлекает все совпадающие результаты, но я не знаю, как мне создать дублирующую таблицу или изменить значения?

РЕДАКТИРОВАТЬ - Я начал щедрость за это в надежде, что кто-то может предложить решение. Единственное требование - не использовать For Each; как я уже знаю, как это сделать. Я стал ближе - но все еще не могу создать новую строку или новую таблицу.

Мой новый подход заходит в тупик, когда я пытаюсь сделать это:

Dim MyNewRow As New Data.DataRow With {.ItemArray = myRemovedQuotes.ToArray}

Сообщение об ошибке, которое я получаю, гласит: «Ошибка 1« System.Data.DataRow.Protected Friend Sub New (построитель как System.Data.DataRowBuilder) »недоступна в этом контексте, поскольку она« Защищенный друг »."

Ответы [ 2 ]

1 голос
/ 16 апреля 2009

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

1 голос
/ 13 апреля 2009

Если вы действительно должны использовать LINQ (возможно, в качестве учебного упражнения), то, возможно, что-то вроде ниже (как C #; мой VB, я боюсь, далеко не до перевода):

        DataTable clone = original.Clone();
        string t;
        var qry = from DataRow row in original.Rows
                  let arr = row.ItemArray
                  select Array.ConvertAll(arr, s =>
                      (t = s as string) != null
                      && t.StartsWith("\'")
                      && t.EndsWith("\'") ? t.Trim('\'') : s);
        foreach (object[] arr in qry) {
            clone.Rows.Add(arr);
        }

Проблема в том, что ItemArray необходимо расширить, сохраняя отдельные строки (поэтому SelectMany не вариант); Array.ConvertAll кажется самым простым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...