0

我有一个DataTable包含我从数据库中获得的 ID 列表。我需要做的是得到一个List<Of Integer>.

这个整数列表将是 中的 Id DataTable,但我需要根据另一个来过滤它们List<Of Integers>。因此,我基本上是在尝试从中生成一个 Id 列表,DataTable但前提是它们存在于我的其他 Id 列表中。

我知道如何进行 Linq To DataSet 查询,但我只是不确定是否可以根据另一个列表对其进行过滤,这里有一些伪代码来解释我想要实现的目标:

List<Of Integer> ExistingList = GetReferenceIds(whatever)
DataTable DBTable = GetAllDatabaseIds(whatever)

List<Of Integer> FilteredList = DBTable.AsEnumerable()
                                    .Where(Column("Id") IN FilteredList).ToList()

有没有一种简单的方法可以做到这一点,而不必枚举列表并检查每一个?

4

1 回答 1

2

有效的是使用Enumerable.Join

IEnumerable<int> IDs = from row in DBTable.AsEnumerable()
             join id in ExistingList
             on row.Field<int>("Id") equals id 
             select id;  // selects the id, you could also select the DataRow

哎呀!这是 VB.NET:

Dim IDs = From row In DBTable
          Join id In ExistingList
          On row.Field(Of Int32)("Id") Equals id
          Select id

有没有办法让我的 ID 不在列表中?

是的,那将是一个外部连接。但在这种情况下Except更容易(甚至可能更有效):

Dim dbIDs = DBTable.AsEnumerable().Select(Function(r) r.Field(Of Int32)("Id"))
Dim notInList As IEnumerable(Of Int32) = dbIDs.Except(ExistingList)
于 2012-09-19T07:45:24.350 回答