Построение динамического запроса 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, что переводит во что-то значимое или полезное.
2 ответа
Просто был момент Eureka и вместо использования предиката я придумал это...
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 требует ряда структурированных полей (запрос повторно используется из различных таблиц, которые из-за плохого дизайна не очень согласованы).
Проверьте этот вопрос - содержит несколько полезных примеров VB для вас: Использование PredicateBuilder с VB.NET