LinqKitライブラリのPredicateBuilderクラスを使用して、VB.netで述語を作成しています。私のデータソースは手動で作成されたデータテーブルです。私が見つけたすべての例は、述語を作成し、その述語をWhere()
datatable.AsEnumerable()のメソッドへの引数として渡す人々を示しています。
Where()
しかし、インテリセンスは、メソッドがタイプ " "のパラメーターを取ると言っていますSystem.Func
が、PredicateBuilderによって返されるタイプは " System.Linq.Expressions.Expression(Of Func(Of T, Boolean))
"
私は何が欠けていますか?
例:
Dim ds As DataTable = getData()
Dim tmp As IEnumerable(Of DataRow) = New DataTable().AsEnumerable()
' CREATE DYNAMIC LINQ WHERE CLAUSE
Dim predicate As System.Linq.Expressions.Expression(Of Func(Of DataRow, Boolean)) = PredicateBuilder.True(Of DataRow)()
If cbHPMS_ShowRequired.Checked Then
predicate = predicate.And(Function(x As DataRow) x("RECORD_TYPE") = "REQUIRED")
End If
If cbHPMS_ShowOptional.Checked Then
predicate = predicate.And(Function(x As DataRow) x("RECORD_TYPE") = "OPTIONAL")
End If
If cbHPMS_EmptyRecord.Checked Then
predicate = predicate.And(Function(x As DataRow) x("RECORD_STATUS") = "EMPTY")
End If
If cbHPMS_PartialRecord.Checked Then
predicate = predicate.And(Function(x As DataRow) x("RECORD_STATUS") = "PARTIAL")
End If
If cbHPMS_CompletedRecord.Checked Then
predicate = predicate.And(Function(x As DataRow) x("RECORD_STATUS") = "COMPLETE")
End If
If Not String.IsNullOrEmpty(ddHPMS_RoadName.SelectedValue) And Not ddHPMS_RoadName.SelectedValue.Equals("Select") Then
predicate = predicate.And(Function(x As DataRow) x("RoadName") = ddHPMS_RoadName.SelectedValue)
End If
tmp = ds.AsEnumerable().Where(predicate)