【问题标题】:find all records in datatable from another datatable从另一个数据表中查找数据表中的所有记录
【发布时间】:2015-07-28 18:42:07
【问题描述】:

我有两个 asp.net 数据表,每个都有一个 UserID 字段。我需要从 table1 返回 table2 中的计数。示例:

表 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

【问题讨论】:

  • @Jeremy 我正在寻找过滤解决方案。建立关系对我没有帮助。
  • 来自文档“创建 DataRelation 后,您可以使用它在表之间导航并检索值。”创建 DataRelation 对象不仅可以定义关系,还可以从另一个表中选择相关记录。
  • msdn.microsoft.com/en-us/library/… 是我所说的更完整的例子。要么,要么使用数据视图,并循环过滤每个值,从而获得计数。

标签: asp.net vb.net linq datatable


【解决方案1】:

对 Linq 进行了一些研究,并能够修改我的问题中的查询,以识别 Table1 中的哪些用户在 Table2 中...

'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

【讨论】:

    【解决方案2】:
    【解决方案3】:

    如果这是最简单的,你可以只做一个 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

    韦德

    【讨论】:

    • 这些对象是在内存(数据表)中动态创建的,所以我不能使用存储过程。
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2016-04-05
    相关资源
    最近更新 更多