Vb.net 如何从结果集中搜索结果集

Vb.net 如何从结果集中搜索结果集,vb.net,winforms,Vb.net,Winforms,我在从结果集中搜索结果时遇到问题 我根据客户id搜索订单并存储在rs中,然后我想根据订单id从rs中搜索付款并存储在rs2中 然后,该rs2将绑定到datagridview中 但我发现,一旦发现新数据,rs2将继续重新分配以前的数据,因此最终结果总是显示最后发现的一个结果。我尝试使用静态rs2,但仍然不起作用 希望有专家能提供解决方案。多谢各位 Private Sub BindCard() Dim name As String = cboCreditType.Text Dim db As

我在从结果集中搜索结果时遇到问题

我根据客户id搜索订单并存储在rs中,然后我想根据订单id从rs中搜索付款并存储在rs2中

然后,该rs2将绑定到datagridview中

但我发现,一旦发现新数据,rs2将继续重新分配以前的数据,因此最终结果总是显示最后发现的一个结果。我尝试使用静态rs2,但仍然不起作用

希望有专家能提供解决方案。多谢各位

Private Sub BindCard()
  Dim name As String = cboCreditType.Text
  Dim db As New ConcertDataContext()

  Dim rs = From o In db.orders Where (o.customer_id = MemberLogin.id)

  Dim allOrders = From id In rs Select id.order_id

  Dim rs2 = From o In db.payments
            Where (name = "All" Or o.creditType = name) And
                  allOrders.Contains(o.order_id)
            Select o.payment_id, o.total_payment, o.creditNumber, o.creditType, o.order_id

  dgv.DataSource = rs2 'Error occurs here'
End Sub

您已经正确地识别了代码中的问题,解决方案非常简单

移除循环,提取要处理的orderid列表,然后将该列表用作包含付款数据的条件

' First extract a list of all orders ID present in the orders selected
Dim allOrders = from id in rs select id.orderid

' Then use that list and select only the payments for those orders
rs2 = From o In db.payments 
        Where (name = "All" Or o.creditType = name) And 
        (allOrders.Contains(o.order_id))
              Select o.payment_id, o.total_payment, o.creditNumber, o.creditType, o.order_id
如果不需要rs中的所有数据,那么可以使用

Dim allOrders = From o In db.orders 
                  Where (o.customer_id = MemberLogin.id)
                  Select o.order_Id

问题是这里使用的是循环。相反,您应该只执行一个查询来检索orderid在第一个查询中的所有记录。我使用了您建议的方式,但它提示了一个arror:System.NullReferenceException:“对象引用未设置为对象的实例。”抱歉,我离开了,您在哪一行获得了异常?我编辑了上面的代码。该错误出现在
结束子项之前的最后一个列表中。起初,我假设数据库中可能并没有导致此错误的数据,因为我还并没有进行任何验证。但我很确定在运行代码之前我已经输入了一些数据。设置数据源可能会触发一系列事件。检查是否有任何DataGridView事件以及错误是否发生在那里。当然,我假设dgv本身不是空的。使用调试器在这些事件中放置断点,并查看是否有人被该设置触发。