Как удалить несколько строк из таблицы данных в VB.NET 2008?

Как удалить несколько строк из таблицы данных в VB.NET 2008 без цикличного выполнения?

  • Я не хочу удалять из базы данных.
  • Я хочу удалить из локальной таблицы данных.
  • Я знаю Select метод и также Remove и удалите в методе также. Но этому нужно цикличное выполнение для удаления строк из таблицы данных.

У меня есть 40 000 строк, и я хочу удалить выбранный 1 000 строк из той таблицы данных.

8
задан Peter Mortensen 6 October 2010 в 13:12
поделиться

9 ответов

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

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

Dim dtTemp As DataTable = ds.Tables("YourTable").Select("RecordsToKeep='This'").CopyToDataTable
ds.Tables("YourTable").Clear()
ds.Tables("YourTable").Merge(dtTemp)
dtTemp.Dispose()

Это лучший ответ на вопрос, который я могу придумать. Похоже, вы можете использовать datatable необычным образом. Как правило, лучше не заполнять записи с самого начала или не фильтровать их при сохранении содержимого в место назначения. Будь то XML-файл, SQL или что-то еще.

Безусловно, метод цикла был бы наиболее эффективным. Это вряд ли будет самым быстрым методом, но для строк размером 4 КБ он, вероятно, достаточно хорош.

11
ответ дан 5 December 2019 в 15:21
поделиться
dt.Rows.RemoveAt(0)
dt.Rows.RemoveAt(1)
0
ответ дан 5 December 2019 в 15:21
поделиться

Используйте SQL-оператор внутри командного объекта ADO.NET. Очевидно, что строки, которые вы хотите удалить, будут иметь что-то общее.

Delete From MyTable where mycolumn='XYZ' and thisColumn='ABC'
0
ответ дан 5 December 2019 в 15:21
поделиться

Если вы хотите удалить все строки, вы можете использовать метод Clear на таблице данных.

0
ответ дан 5 December 2019 в 15:21
поделиться

Может быть, использование DataView сделает трюк. Например, вы можете отфильтровать строки, которые хотите сохранить, в DataView, преобразовать представление в таблицу и утилизировать исходную таблицу. Тогда у вас будет таблица с нужными вам строками.

Dim view As DataView = YourTable.DefaultView            
view.RowFilter = "YourFilterColumn = 1259"
Dim tblNew as Datatable = view.ToTable
YourTable.Dispose

Дайте мне знать, если это работает для вас.

0
ответ дан 5 December 2019 в 15:21
поделиться

В некоторых случаях мы всегда можем написать хранимую процедуру для оптимизации структуры сущностей ADO.NET или LINQ to SQL. Недостатком является то, что эта модель начинает выглядеть немного противоречивой. Мне тоже интересно, есть ли способ лучше :)

0
ответ дан 5 December 2019 в 15:21
поделиться

Вы можете вызвать DeleteAllOnSubmit(), если вы используете LINQ to SQL. Однако это приведет к отправке оператора DELETE для каждой удаляемой сущности, что крайне неэффективно. Вы всегда можете использовать LINQ to SQL, или использовать хранимую процедуру.

BTW, ваш вопрос очень общий. Сначала я рекомендовал использовать предложение WHERE.

0
ответ дан 5 December 2019 в 15:21
поделиться

Я думаю, вам следует использовать для этого LINQ. Вы получите данные из набора данных и напишите запрос LINQ для удаления строки, соответствующей вашим критериям.

Так что вам не нужно для этого зацикливаться.

Вот некоторые ссылки, которые могут вам помочь.

0
ответ дан 5 December 2019 в 15:21
поделиться

Я не уверен, что это официально квалифицируется как использование цикла, но вот решение, использующее LINQ:

dt.BeginLoadData();
( from row in dt.AsEnumerable()
  where row.Field<string>( "MyColumn"  ) == "DeleteValue"
  select row ).ToList().ForEach( row => row.Delete() );
dt.EndLoadData();
dt.AcceptChanges();

TBH, я не уверен, что есть способ делайте это, не пропуская ряды на каком-то уровне. Либо вы перебираете строки, удаляя те, которые вам не нужны, либо создаете новую таблицу, заполненную всем, кроме строк, которые вам не нужны. Однако следует отметить, что даже в более позднем случае NET, вероятно, перебирает строки в цикле, чтобы определить, следует ли включать строку в таблицу хранителя.

0
ответ дан 5 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: