You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VB.Net将Dataset与List(Of Int64)对比并筛选数据

需求说明

我正在开发一个应用,需要将API返回的整数列表与包含对应Id的Dataset进行对比,筛选出Dataset中存在于该列表内的Id对应的记录。例如,若API响应包含Id 1和2,则需移除除这两个Id对应的位置外的所有其他位置。

现有代码

调用API与获取Dataset的代码

Dim response = Await mKubotaInvoiceHistoryApi.GetKubotaInvoiceLocationIdentitiesAsync()
mLocations = UIC.Cache.GetSimpleLocation()

API方法定义

Public Async Function GetKubotaInvoiceLocationIdentitiesAsync() As Task(Of List(Of Int64))
    Dim response = Await sendGetAsync(Of List(Of Int64))(
        "api/partners/kubota/kubotainvoicehistory")
    Return response
End Function

Dataset结构说明

mLocations 是一个Dataset,内部包含的表带有LocationId字段(即需要与API返回列表匹配的Id字段),以及其他描述位置的相关字段。

筛选实现方案

方法1:利用DataTable原生Select方法

通过生成IN筛选条件,直接从DataTable中筛选符合条件的行,再构建新的DataTable替换原Dataset中的表:

' 指定Dataset中的目标数据表(可根据实际表名调整,比如mLocations.Tables("LocationTable"))
Dim targetTable = mLocations.Tables(0)
' 生成筛选条件字符串:LocationId IN (id1,id2,...)
Dim filterCondition = $"LocationId IN ({String.Join(",", response)})"
' 获取符合条件的数据行
Dim matchedRows = targetTable.Select(filterCondition)
' 复制表结构并导入筛选后的行
Dim filteredTable = targetTable.Clone()
For Each row In matchedRows
    filteredTable.ImportRow(row)
Next
' 更新Dataset中的表
mLocations.Tables.Remove(targetTable)
mLocations.Tables.Add(filteredTable)

方法2:使用LINQ查询筛选

借助LINQ语法实现更灵活的筛选逻辑,需要引用System.Data.DataExtensions:

Imports System.Data.DataExtensions

' 获取目标数据表
Dim targetTable = mLocations.Tables(0)
' 筛选出LocationId在API返回列表中的行
Dim filteredRows = From row In targetTable.AsEnumerable()
                   Where response.Contains(row.Field(Of Int64)("LocationId"))
                   Select row
' 构建筛选后的新表
Dim filteredTable = targetTable.Clone()
filteredRows.CopyToDataTable(filteredTable, LoadOption.OverwriteChanges)
' 更新Dataset
mLocations.Tables.Remove(targetTable)
mLocations.Tables.Add(filteredTable)

注意:如果API返回的response为空列表,上述代码会清空Dataset中的对应表,可根据业务需求添加空值判断逻辑。

内容的提问来源于stack exchange,提问作者Kamran Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:35:32