我有两个asp.net数据表,每个都有一个UserID字段。我需要返回table2中table1的那些计数。例如:
表1: 用户身份 123, 456, 789
表2: 用户身份 789, 456
结果应为2(789和456)。
Table1和Table2可能有数千条记录。我正在寻找最有效的方法来返回结果,asp.net,vb.net。我看过Linq但从未使用它,不确定这是否有帮助...
How to detect that a datatable is a part of another datatable
这几乎可行。它给了我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
答案 0 :(得分:0)
如果这是最简单的话,你可以做一个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
瓦德
答案 1 :(得分:0)
答案 2 :(得分:0)
对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