PredicateBuilder, VB.net и где () - PullRequest
2 голосов
/ 28 июня 2011

Я строю предикат в VB.net, используя класс PredicateBuilder из библиотеки LinqKit.Мой источник данных создан вручную.Все примеры, которые я нашел, показывают, что люди создают предикат, а затем передают этот предикат в качестве аргумента методу Where() в datatable.AsEnumerable ().

Но intellisense говорит мне, что 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)

1 Ответ

4 голосов
/ 28 июня 2011

Я не использовал LinqKit, но подумал бы, что это будет похоже на

tmp = ds.AsEnumerable().Where(predicate.Compile())
...