如何使用Linq在列表中使用我的条件查询DataTable?

时间:2012-09-19 07:25:55

标签: .net vb.net linq datatable

我有一个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()

有没有一种简单的方法可以做到这一点而无需通过列表进行枚举并检查每一个?

1 个答案:

答案 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)