投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/2/15 11:44:04
先の Query2 で、Predicate を使わずに単純化したものも載せておきます。

'    (   [ID] IN (     '001',    '002') )  
' OR ( [NAME] IN ('ライオン', 'コアラ') )  
' OR ( [DESC] LIKE '%長い%'             )  
'  
Dim Query2改 = From row In MstDtTbl
     Where IdList.Contains(row.Field(Of String)("ID")) _
     OrElse NameList.Contains(row.Field(Of String)("NAME")) _
     OrElse row.Field(Of String)("DESC"Like DescLike
     Select New With {
         Key .NAME = row.Field(Of String)("NAME"),
         Key .DESC = row.Field(Of String)("DESC")
     }

※ Key を付けるかどうかはお好みで。


上記の場合、ID/NAME/DESC いずれかの条件に一致したものが抽出されます。
Linq の記述は変更せず、渡すリストを
 Dim IdList As New List(Of String)() From {"001""002"}
 Dim NameList As New List(Of String)() '要素なし 
 Dim DescLike As String = "" '該当なし 

にしてやれば、ID だけでの検索となります。


条件のどこまでを動的とするのかにもよりますが、
まずは YuO さんが書かれていたように、List.Contains
あるいは Array.IndexOf を使うところから
始めてみるのが良いと思います。