0

DataTableDB から取得した Id のリストを含む があります。私がする必要があるのは、List<Of Integer>.

この整数のリストは の Id になりますが、DataTable別の に基づいてそれらをフィルタリングする必要がありますList<Of Integers>。だから私は基本的に から Id のリストを生成しようとしていますが、それらが Id のDataTable他のリストに存在する場合に限ります。

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 に答える