私が自分でやっていることがわかった1つのソリューション(MS SQL 2005/2008の場合)。また、すべてのシナリオで適切かどうかはわかりませんが、動的SQLを記述し、ExecuteQueryメソッドを使用してデータコンテキストに対して実行するだけです。
たとえば、次を実行するためにクエリに渡そうとしている無制限のリストがある場合...
' Mock a list of values
Dim ids as New List(of Integer)
ids.Add(1)
ids.Add(2)
' ....
ids.Add(1234)
Dim indivs = (From c In context.Individuals _
Where ids.Contains(c.Id) _
Select c).ToList
このクエリを変更して、データベースに対して直接実行する SQL 文字列を作成します...
Dim str As New Text.StringBuilder("")
Dim declareStmt as string = "declare @ids table (indivId int) " & vbcrlf)
For i As Integer = 0 To ids.Count - 1
str.Append("select " & ids(i).ToString() & " & vbcrlf)
If i < ids.Count Then
str.Append("union " & vbcrlf)
End If
Next
Dim selStatement As String = "select * From " & context.Mapping.GetTable(GetType(Individuals)).TableName & _
" indiv " & vbcrlf & _
" inner join @ids ids on indiv.id = ids.id"
Dim query = declareStmt & str.ToString & selStatement
Dim result = context.ExecuteQuery(of Individual)(query).ToList
したがって、私がコーディングした構文エラーやバグを除いて (上記は多かれ少なかれ疑似コードであり、テストされていません)、上記は SQL でテーブル変数を生成し、目的のテーブル (この例では個人) に対して内部結合を実行し、回避します「IN」ステートメントの使用。
それが誰かを助けることを願っています!