投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/2/15 11:15:39
> そのような,単一の条件式に置き換え不可能な条件をOrElseで結合したい場合は,

試しに書いてみました。

Dim IdList   As New List(Of String)() From {     "001",    "002"}
Dim NameList As New List(Of String)() From {"ライオン""コアラ"}
Dim DescLike As String = "*長い*"


'-- 以下の問い合わせに相当-- 

'     (   [ID] IN (     '001',    '002') ) 
' AND ( [NAME] IN ('ライオン', 'コアラ') ) 

Dim Query1 = From row In MstDtTbl
             Where IdList.Contains(row.Field(Of String)("ID"))
             Where NameList.Contains(row.Field(Of String)("NAME"))
             Select NAME = row.Field(Of String)("NAME"),
                    DESC = row.Field(Of String)("DESC")


Dim conditions As New List(Of Predicate(Of DataRow))()
conditions.Add(Function(row) IdList.Contains(row.Field(Of String)("ID")))
conditions.Add(Function(row) NameList.Contains(row.Field(Of String)("NAME")))
conditions.Add(Function(row) row.Field(Of String)("DESC"Like DescLike)

'-- 以下の問い合わせに相当-- 

'    (   [ID] IN (     '001',    '002') ) 
' OR ( [NAME] IN ('ライオン', 'コアラ') ) 
' OR ( [DESC] LIKE '%長い%'             ) 

Dim Query2 = From row In MstDtTbl
             Where conditions.Any(Function(c) c(row))
             Select NAME = row.Field(Of String)("NAME"),
                    DESC = row.Field(Of String)("DESC")