Aravindba Ответов: 1

Удаление строк из таблицы данных, существующей в другой таблице данных


Всем Привет,

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

Bcz обе таблицы данных получили более 2 лакхов строк,в то время как использование для цикла, это замедлит процесс, так что любой другой способ удалить ?

Как удалить с одного выстрела ?

Что я уже пробовал:

Dim dt1 As New DataTable()
dt1.Columns.Add("Name")
dt1.Rows.Add("Apple")
dt1.Rows.Add("Banana")
dt1.Rows.Add("Orange")
 
Dim dt2 As New DataTable()
dt2.Columns.Add("Name")
dt2.Rows.Add("Apple")
dt2.Rows.Add("Banana")
 
Dim rows_to_remove As New List(Of DataRow)()
For Each row1 As DataRow In dt1.Rows
    For Each row2 As DataRow In dt2.Rows
        If row1("Name").ToString() = row2("Name").ToString() Then
            rows_to_remove.Add(row1)
        End If
    Next
Next
 
For Each row As DataRow In rows_to_remove
    dt1.Rows.Remove(row)
    dt1.AcceptChanges()
Next


For example i gave 3 and 2 datas, but actually it retrieve  from database more than 2 lakhs data.

Regards,
Aravind

1 Ответов

Рейтинг:
10

Maciej Los

Нет, нет никакого шанса удалить данные без использования For...Next петля.
Примечание: Вы используете For...Next петля 3 раза. Вы можете закоротить его только до одной петли. Как же так? Соедините таблицы по Name поле для получения общих записей для обеих таблиц, а затем удалите его из dt1.

Dim rows_to_remove = From a In dt1.AsEnumerable() Join b In dt2.AsEnumerable() On a.Field(Of String)("Name") Equals b.Field(Of String)("Name")
	Select a
'returns:
'Apple 
'Banana 


Вы можете использовать Linq Кроме[^] метод тоже:
Dim rows_to_remove = dt2.AsEnumerable.Except(dt1.AsEnumerable())
'returns:
'Apple 
'Banana 


Но! Я бы сделал это на стороне сервера с помощью Transact SQL. Видеть: Удалить (Transact-SQL) | Microsoft Docs[^]

DELETE 
FROM Table1 
WHERE FieldName1 IN (SELECT FieldName1 FROM Table2)


Aravindba

да спасибо, почему я использую таблицу данных, bcz run time icneed для удаления и показа, вот y я привязываю в datatable и удаляю оттуда, а не удаляю в основной таблице в sql.

В любом случае спасибо за ответ 1 и 2 работайте со мной.

Maciej Los

Отлично!
Всегда пожалуйста.