我有两个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