我有一个DataTable
,其中包含我从数据库中获取的ID列表。我需要做的是获得List<Of Integer>
。
这个整数列表将是DataTable
中的ID,但我需要根据另一个List<Of Integers>
过滤它们。所以我基本上试图从DataTable
生成Id的列表,但前提是它们存在于我的其他ID列表中。
我知道如何进行Linq To DataSet查询,但我只是不确定是否可以根据另一个List过滤它,这里有一些伪代码来解释我想要实现的目标:
List<Of Integer> ExistingList = GetReferenceIds(whatever)
DataTable DBTable = GetAllDatabaseIds(whatever)
List<Of Integer> FilteredList = DBTable.AsEnumerable()
.Where(Column("Id") IN FilteredList).ToList()
有没有一种简单的方法可以做到这一点而无需通过列表进行枚举并检查每一个?
答案 0 :(得分:1)
most efficient正在使用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不在列表中?
是的,那将是outer join。但在这种情况下,Except
更容易(甚至可能更有效):
Dim dbIDs = DBTable.AsEnumerable().Select(Function(r) r.Field(Of Int32)("Id"))
Dim notInList As IEnumerable(Of Int32) = dbIDs.Except(ExistingList)