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

时间:2015-05-17 04:02:33

标签: asp.net vb.net linq datatable

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

3 个答案:

答案 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