投稿者 CnCnSf  (社会人) 投稿日時 2016/2/14 13:02:59
 
いつも拝見させていただいており、
 大変お世話になっています。

 開発環境は、
VB2010(.NET Framework4.0)です。

DataTable変数からデータを抽出するLINQ文について。
このLINQ文で動的にwhere句を組み立てたいです。

たとえば、以下のLINQは、
ID列が、001 もしくは002のレコードを抽出するものですが。

このwhere句の部分を動的に組立てたいです。

具体的には、以下 LINQ文の、
MstTbl.Field(Of String)("ID") = "xxx" の条件を
動的に、ORで、n個つなげたいです。



Dim MstDtTbl As DataTable = New DataTable

MstDtTbl.Columns.Add("ID")
MstDtTbl.Columns.Add("NAME")
MstDtTbl.Columns.Add("DESC")

MstDtTbl.Rows.Add("001", "ライオン", "肉食")
MstDtTbl.Rows.Add("002", "チーター", "足早い")
MstDtTbl.Rows.Add("003", "キリン", "首が長い")
MstDtTbl.Rows.Add("004", "コアラ", "オーストラリア")
MstDtTbl.Rows.Add("005", "タカ", "空飛ぶ")

Dim Query = _
    From MstTbl In MstDtTbl.AsEnumerable() _
    Where MstTbl.Field(Of String)("ID") = "001" _
       Or MstTbl.Field(Of String)("ID") = "002" _
    Select New With _
           { _
               .NAME = MstTbl.Field(Of String)("NAME"), _
               .DESC = MstTbl.Field(Of String)("DESC") _
           }


Dim SelDtTbl As DataTable = New DataTable
SelDtTbl.Columns.Add("NAME")
SelDtTbl.Columns.Add("DESC")

For Each Qry In Query
    SelDtTbl.Rows.Add(Qry.NAME, Qry.DESC)
Next