Создание динамического запроса LINQ

У меня есть список, который пользователи могут выбрать из списка, если города, я хочу иметь возможность создавать запрос LINQ на основе выбранных элементов в списке, например.

Dim ddlTowns As ListBox = CType(Filter_Accommodation1.FindControl("ddlTowns"), ListBox)
        If Not ddlTowns Is Nothing Then
            For Each Item In ddlTowns.Items
                If Item.Selected Then
                    '// Build query
                End If
            Next
        End If

Я исследовал LinqKit, поскольку он, похоже, может делать то, что мне нужно, но после нескольких часов попыток я не могу добиться каких-либо успехов. Я не могу найти в VB ничего значимого или полезного.


person David    schedule 16.03.2011    source источник


Ответы (2)


Просто был момент Эврики, и вместо того, чтобы использовать предикат, я придумал это ...

Private Function Filter_Accommomdation_QueryBuilder() As IEnumerable

            Dim ddlTowns As ListBox = CType(Filter_Accommodation1.FindControl("ddlTowns"), ListBox)
            Dim myList As New List(Of String)
            If Not ddlTowns Is Nothing Then
                For Each Item In ddlTowns.Items
                    If Item.Selected Then
                        myList.Add(Item.value)
                    End If
                Next
            End If

            Dim Filter_Query = _
                       From c In InitialQuery _
                       Where myList.ToArray.Contains(c.MyData.element("townvillage").value) _
                       Select c
            Return Filter_Query


        End Function

В качестве примечания я использую c.MyData, поскольку природа InitialQuery требует наличия ряда структурированных полей (запрос повторно используется из различных таблиц, которые из-за плохого дизайна не очень согласованы).

person David    schedule 16.03.2011

Ознакомьтесь с этим вопросом - содержит несколько полезных для вас примеров VB: Использование PredicateBuilder с VB.NET

person Stuart    schedule 16.03.2011