Не могу понять ошибку в коде сортировки - PullRequest
0 голосов
/ 29 июля 2010

Мне недавно задали странный вопрос в интервью, вот оно;

Private Function sorttable  (ByVal dt As DataTable, ByVal sorttype$, ByVal sort_direction$) As DataTable 
         Dim dv As DataView  
         Dim dt2 As DataTable  
         dt2 = dt.Clone  
         dt2.Merge(dt)  
         dv = dt2.DefaultView  
         dv.Sort = sorttype & " " & sort_direction  
         Return dv.ToTable()  
End Function

Хорошо, эта функция работает правильно, но есть проблема (по крайней мере, по словам интервьюера) Ну, я не мог понять, что это было. Есть идеи?

Ответы [ 4 ]

1 голос
/ 29 июля 2010

Вы создаете DataTables без причины.

Вы можете использовать этот код для получения того же результата

Private Function sorttable  (ByVal dt As DataTable, ByVal sorttype$, ByVal sort_direction$) As DataTable  
         Dim dv As DataView   
         dv = dt.DefaultView   
         dv.Sort = sorttype & " " & sort_direction   
         Return dv.ToTable()   
End Function 
1 голос
/ 29 июля 2010

Я никогда не использовал DataView или DataTable, но код не удаляет объекты.

0 голосов
/ 29 июля 2010

Я придумал такой хороший ответ, но мой FF разбился ...

так в двух словах ..

Но что там происходит

  • DataTable - представляет одну таблицу данных в памяти.

    • Клонировать - клонирует структуру DataTable, включая все схемы и ограничения DataTable.

    • Слияние (DataTable dataTable) - этот элемент перегружен. Для получения полной информации об этом члене, включая синтаксис, использование и примеры, щелкните имя в списке перегрузки.

    • DefaultView - получает настроенное представление таблицы, которое может включать в себя отфильтрованное представление или позицию курсора.

  • DataView - представляет настраиваемое представление DataTable с возможностью привязки к данным для сортировки, фильтрации, поиска, редактирования и навигации.

    • Сортировка - получает или задает столбец или столбцы сортировки, и порядок сортировки для DataView . Структура строки сортировки - «Строка, содержащая имя столбца, за которым следует« ASC »(по возрастанию) или« DESC »(по убыванию). По умолчанию столбцы сортируются по возрастанию. Несколько столбцов можно разделить запятыми.» Метод Clone работает почти так же, как Copy, единственное отличие состоит в том, что новый DataTable, созданный методом Clone, не содержит никаких DataRows.

Сокращение, которое Вы в середине времени приняли как хороший ответ, в некоторых случаях может быть резонным, например, мы хотим, чтобы только отсортированная копия этих данных использовалась для других целей. Но клонировать, а затем объединять не нужно, член Copy сделает то же самое.

Я не эксперт, но свойство Sort of DataView сортирует DataView, когда мы возвращаем DataTable, поэтому мы ничего не сортируем.

0 голосов
/ 29 июля 2010

Редактировать: объединять только копии схемы, а не строки. Вот почему вам это нужно.

Я вижу только две проблемы: Merge и избыточные переменные (dt2). Поскольку они передаются по значению, нет причин делать дополнительные локальные копии и создавать больше места для ошибок. Это известно как кодовый запах . Кроме того, зачем объединяться, когда вы только что создали клон исходной таблицы данных, которая уже содержит ограничения и схему? Это как удвоение.

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