asp.net - 将 vb.net 数据集中的数据与数组列表中的值进行比较

标签 asp.net sql vb.net dataset

我正在寻找一种有效的方法来搜索数据集以查看某个项目是否存在。我有一个包含约 6000 个项目的数组列表,我需要通过将数组列表中的每个项目与数据集特定列中的数据进行比较来确定数据集中不存在哪些项目。

我尝试循环遍历数组列表中的每个项目的数据集中的每个项目,但这花了很长时间。然后我尝试使用下面的 RowFilter 方法。这些看起来都没有效率。非常感谢任何帮助,因为你可以看出我不是一个程序员......

示例:

Dim alLDAPUsers As ArrayList
alLDAPUsers = clsLDAP.selectAllStudents

Dim curStu, maxStu As Integer
maxStu = alLDAPUsers.Count

For curStu = 0 To maxStu - 1
     Dim DomainUsername As String = ""
     DomainUsername = alLDAPUsers.Item(curStu).ToString

     Dim filteredView As DataView
     filteredView = dsAllStudents.Tables(0).DefaultView
     filteredView.RowFilter = ""
     filteredView.RowFilter = "szvausr_un = '" & DomainUsername & "'"

     Dim returnedrows As Integer = filteredView.Count
     If returnedrows = 0 Then
          '' Delete the user...
     End If
Next

最佳答案

您可以通过对列表进行排序并对数据集进行排序来获得更好的性能。然后你可以把它们一起走,边走边匹配。尤其如此,因为您可能至少(或者应该)在创建数据集的 SQL 查询中已经对数据集进行了排序,从而使该步骤基本上是免费的。

您应该考虑使用通用列表而不是 ArrayList,以及现有代码中的一些其他风格点:

Dim LDAPUsers As List(Of String) = clsLDAP.selectAllStudents

For Each DomainUsername As String in LDAPUsers
     Dim filteredView As DataView = dsAllStudents.Tables(0).DefaultView
     filteredView.RowFilter = "szvausr_un = '" & DomainUsername & "'"

     If filteredView.Count = 0 Then
      '' Delete the user...
     End If
Next

这与您的原始代码片段执行相同的操作,但空间减少了一半,因此更加干净且更具可读性。

关于asp.net - 将 vb.net 数据集中的数据与数组列表中的值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243267/

相关文章:

c# - 如何在传递接口(interface)时访问不同具体类的属性

asp.net - Request.IsAuthenticated 始终为真。我错过了什么?

asp.net - 如何为 Elmah 使用 EntityFramework 连接字符串?

php - 如何减少向数组添加值的时间?

mysql - 使用另一个表中的相应数据更新所有表记录

SQL + 具有不同行集的内部选择

c# - 检查字符前后是否有空格进行字符串拆分

c# - 迭代 IDictionary/Dictionary 对象

database - INSERT INTO 语句中的语法错误。在 VB.net 2010 中

c# - VB.Net - 检查文件是否为 .net 二进制文件