从另一个数据表中查找数据表中的所有记录



我有两个asp.net数据表,每个都有一个UserID字段。我需要返回表1中表2中那些的计数。例子:

表:用户标识123年,456年,789

表:用户标识789年,456

结果应该是2(789和456)。

表1和表2可能有数千条记录。我正在寻找最有效的方式来返回结果,asp.net, vb.net。我看过Linq,但从未使用过它,不确定这是否有帮助…

如何检测一个数据表是另一个数据表的一部分

这几乎可以工作。结果是123。有人知道456和789怎么走吗?

Dim dt3 As DataTable = dt_users.[Select]().Where(Function(x) 
Not dt.[Select](String.Format("UserID = '{0}'",   x("UserID"))).Any()).CopyToDataTable()
'get returned UserID
For Each row As DataRow In dt3.Rows
    Dim user As String = row("UserID")
Next

如果这是最简单的,你可以只做一个sql语句(没有看到它是linq解决方案的要求)。你可以这样写:

select table1.* from table1 inner join table2 on table1.UserID = table2.UserID

也可以使用exists语句:

select * from table1 where exists (select 1 from table2 where table2.UserId = table1.UserId)

我不是哪个更快的专家,但我相信第一个例子将是最快的,假设两个列都被索引。

HTH

韦德

查看LINQ-to-Objects,特别是Join方法

对Linq做了一点研究,并能够修改我的问题中的查询,以确定表1中的哪些用户在表2中…

'get Users from Table1 (dt_users) that are in Table2 (dt)
 Dim dt3 As DataTable = dt_users.[Select().Where(Function(x) dt.[Select](String.Format("UserID = '{0}'", x("UserID"))).Any()).CopyToDataTable()
'output result from above dt3
 For Each row As DataRow In dt3.Rows
      Dim user As String = row("UserID")
 Next
'get Users from Table1 (dt_users) that are NOT in Table2 (dt)
Dim dt4 As DataTable = dt_users.[Select]().Where(Function(x) Not dt.[Select](String.Format("UserID = '{0}'", x("UserID"))).Any()).CopyToDataTable()
'output result from dt4
For Each row As DataRow In dt4.Rows
    Dim user As String = row("UserID")
Next

相关内容

  • 没有找到相关文章