- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 2 个数据表:
TableA:
id | name | phone
-----------------
1 | Paul | 8523
2 | John | 5217
3 | Stan | 5021
TableB:
id
--
2
5
我想在它们之间做一个不包括连接的左:我想要一个 DataTable 对象,其中包含 TableA
的所有行,这些行在 TableB< 中有相应的
.id
列
我想要的结果是这样的:
id | name | phone
-----------------
1 | Paul | 8523
3 | Stan | 5021
我已经用 for
循环完成了这个,但我认为如果我使用 LINQ 会更简单。问题是我尝试过的所有方法都不起作用。
如何使用 LINQ 执行此操作?
for
循环的代码是这样的:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim table = LeftExcludingJoin()
If table IsNot Nothing Then
For Each row As DataRow In table.Rows
Console.WriteLine(row.Item("id") & " - " & row.Item("name") & " - " & row.Item("phone"))
Next
End If
End Sub
Private Function LeftExcludingJoin() As DataTable
Dim tableA As New DataTable
tableA.Columns.Add("id")
tableA.Columns.Add("name")
tableA.Columns.Add("phone")
Dim tableB As New DataTable
tableB.Columns.Add("id")
'Rows for tableA
Dim rowA1 As DataRow = tableA.NewRow
rowA1.Item("id") = 1
rowA1.Item("name") = "Paul"
rowA1.Item("phone") = 8523
tableA.Rows.Add(rowA1)
Dim rowA2 As DataRow = tableA.NewRow
rowA2.Item("id") = 2
rowA2.Item("name") = "John"
rowA2.Item("phone") = 5217
tableA.Rows.Add(rowA2)
Dim rowA3 As DataRow = tableA.NewRow
rowA3.Item("id") = 3
rowA3.Item("name") = "Stan"
rowA3.Item("phone") = 5021
tableA.Rows.Add(rowA3)
'Rows for tableB
Dim rowB1 As DataRow = tableB.NewRow
rowB1.Item("id") = 2
tableB.Rows.Add(rowB1)
Dim rowB2 As DataRow = tableB.NewRow
rowB2.Item("id") = 5
tableB.Rows.Add(rowB2)
'Get rows in A which are not in B
Dim tableResult = tableA.Clone
If tableA IsNot Nothing Then
If tableB IsNot Nothing Then
For Each rowA As DataRow In tableA.Rows
Dim coincidence As Boolean = False
For Each rowB As DataRow In tableB.Rows
If rowA.Item("id") = rowB.Item("id") Then
coincidence = True
Exit For
End If
Next
If coincidence = False Then
Dim newResultRow As DataRow = tableResult.NewRow
newResultRow.Item("id") = rowA.Item("id")
newResultRow.Item("name") = rowA.Item("name")
newResultRow.Item("phone") = rowA.Item("phone")
tableResult.Rows.Add(newResultRow)
End If
Next
Else
'All tableA values are part of the result because tableB is Nothing.
Return tableA
End If
Return tableResult
Else
Return Nothing
End If
End Function
最佳答案
介绍,以简化程序(在其他情况下可能有用):
明确定义 Columns 数据类型:
tableA.Columns.Add("id", GetType(Integer))
电话号码(代码)是一个字符串,而不是一个整数(也许 phone
只是一个例子,没关系):
tableA.Columns.Add("phone", GetType(String))
可以使用接受 paramarray as object()
的重载来添加行.它可以是值序列或 Object() 数组:
tableA.Rows.Add(1, "Paul", "8523")
System.Data.DataSetExtensions.dll
程序集包含扩展方法,允许使用 AsEnumerable() 将 LINQ 查询(在 IEnumerable<T>
集合上运行)应用于数据表扩展方法。
此程序集通常与 System.Data
一起包含在新项目中。集会。如果不存在,请添加项目引用。
之后,可以在 Where()
上使用通常的过滤条件( Any()
、 All()
、 IEnumerable(Of DataRow)
等) 扩展方法生成的对象。
可以使用 EnumerableRowCollection<TRow>
将查询的 IEnumerable 结果 ( CopyToDataTable() )转换到 DataTable 中扩展方法。
Where()
id
列不等于 Any()
id
第二个数据表的列并使用此过滤器创建一个新的数据表:Private Function LeftExcludingJoin() As DataTable
Dim tableA As New DataTable("TableA")
tableA.Columns.Add("id", GetType(Integer))
tableA.Columns.Add("name", GetType(String))
tableA.Columns.Add("phone", GetType(String))
tableA.Rows.Add(1, "Paul", "8523")
tableA.Rows.Add(2, "John", "5217")
tableA.Rows.Add(3, "Stan", "5021")
Dim tableB As New DataTable("TableB")
tableB.Columns.Add("id", GetType(Integer))
tableB.Rows.Add(2)
tableB.Rows.Add(5)
Dim rows = tableA.AsEnumerable().
Where(Function(drA) Not tableB.AsEnumerable().
Any(Function(drB) CInt(drB("id")) = CInt(drA("id"))))
Return If(rows.Count() = 0, Nothing, rows.CopyToDataTable())
End Function
关于.net - 左排除加入在 vb.net 中使用 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64862710/
这个问题已经有答案了: Declaring multiple object pointers on one line causes compiler error (5 个回答) 已关闭 6 年前。 l
我目前正在学习语言处理器,经常出现的一个话题是语法中元素的使用方向。从左到右或从右到左。 我理解这个概念,但似乎有很多方法可以编写这些规则,我不确定它们是否都相同。到目前为止我看到的是: 右/左递归,
我有一个很长的线性(分支不多)流程图,在 graphviz 中显示为要么太高而无法放在单个页面上,要么太宽(如果方向是从左到右) 是否有一种简单的方法可以让 graphviz 以从左到右,然后向下,然
我一直摸不着头脑,但运气不好。设计器有一个包含 3 栏的站点、两个侧边栏和一个主要内容区域。 专为桌面设计,左栏、主要内容、右栏。但是,在较小的设备上,我们希望首先堆叠主要内容。 所以通常情况下,你可
我想要从上到下和从左到右组织的 css block 。 为了更好地解释这是一张图片,其中包含我到目前为止所获得的内容以及我希望使用 CSS 实现的内容: 代码如下: HTML: 1 2 3 4 5
当我问this question时,答案之一(现已删除)建议Either类型对应Curry-Howard correspondence中的XOR而不是OR,因为它不能同时是Left和Right。 真相
我有一个程序,如果用户按住向左或向右箭头键, Angular 色会逐渐朝那个方向加速,并最终达到最大速度。松开按键后, Angular 色逐渐减速,直至完全停止。 我的右方向键没问题,但左方向键坏了。
今天很简单的一个。我有一个专栏,我们称之为标题,有一堆项目标题。我需要从“:”的左侧拉出所有内容并进行左/右修剪(稍后我将在连接中使用它,但我现在只需要一个包含新数据的列) .下面是当前列的示例: 这
我正在尝试将图表中的列与左侧对齐。默认情况下,它们位于中间。 我在 API 文档中找不到任何关于此的信息。 Here是一个 jsFiddle 测试。 最佳答案 在 highcharts api 中,您
左旋转进位和右旋转进位指令有哪些实际用途? 在我的汇编课上,我们无法想出一个有用的好例子。 最佳答案 如果您想将位从一个操作数移出并移入另一个操作数: SHL EAX, 1 ; mov
我有一个查询,它使用 eqjoin 从两个不同的表返回以下数据。我想将 left 和 right 结合起来,而不是执行 zip() (重写 name > 和 joined_at),我想将右侧对象的属性
我使用 firebase API。发送和检索消息。但是,我在尝试为发送者/检索者设置布局时遇到麻烦,以便消息将左/右对齐。目前我只有发送者/检索者都使用的一种布局,但不确定如何设置不同的布局。 pub
我的菜单基本上是一个水平项目滑动条。所有菜单项都有特定的默认 CSS 属性。我希望这些项目在到达主容器的中心时更改其大小和左/右边距,并在离开主容器(或位于主容器之外)时重置为默认值。请参阅我的原理图
我有一个引用表,在这个表中有 3 个字段(Id、User1、User2)。 User2 字段可以为空,但我们在不使用时使用 0。 当我执行下面的 Linq 查询时,User2 == 0 的记录不是结果
不知道如何解决这个问题。 我有两个表结果和受访者 我需要查明受访者表中是否有任何行具有completion =“Complete”,但它们的respondent_id(在结果表和受访者表中)不在结果表
我正在尝试访问三个表以获得类似这样的内容: +------+------+------+ | ITEM | PCS | CSS | +------+------+------+ | 1099 |
left 和 right join 有区别吗,下面的sql 语句结果一样,但是两者的性能是一样的吗? SELECT count(*) FROM writers RIGHT JOIN blogs O
当我使用 LEFT() 使用以下代码从数据库中获取值时 $select="SELECT LEFT(description,500) FROM tbl_news where id='$id'"; $qu
当我将鼠标悬停在水平导航菜单上的页面名称上时,相关子页面会 float 在下方。 目前这些显示居中,我如何对齐它们以便它们向左对齐(与导航菜单标题名称一致)。 你可以去看到这个 http://79.1
在下面的引导网格示例中,它使用 col-sm 和 col-sm-push/pull。col-sm-push 指定了左/右值(偏移量)。 我不太清楚它是如何工作的。 第二个 float 元素来到第一个
我是一名优秀的程序员,十分优秀!