我找到了实现扩展BindingList的SortableBindingList的代码,理论上它让排序和过滤通用对象列表。它完美地排序列表但我无法过滤。
过滤器代码如下
Protected Sub UpdateFilter()
_isSorted = False 'remove sort.
Try
'We filter on the entire collection
Dim filtered = _originalData.AsQueryable()
If Not String.IsNullOrEmpty(_filter) Then filtered = filtered.Where(_filter)
Dim filteredResult = filtered.ToList()
Items.Clear()
If filteredResult IsNot Nothing AndAlso filteredResult.Count > 0 Then
For Each tItem As T In filtered
Items.Add(tItem)
Next
End If
Catch
'Reset the list
Items.Clear()
For Each tItem As T In _originalData
Items.Add(tItem)
Next
'Rethrow the error
Throw
Finally
OnListChanged(New ListChangedEventArgs(ListChangedType.Reset, -1))
End Try
End Sub
问题是,以下示例在子句中接收像过滤器一样的字符串,但是编译因为等待函数而导致错误,我不知道如何解决这个问题
对不起,如果你不太了解。我不会说英语
你需要传递一个谓词。我希望这个例子能指导你。
Private Function AddFilter(list As List(Of String), filter As Func(Of String, Integer, Boolean)) As List(Of String)
Dim l As IEnumerable(Of String) = Nothing
If Not IsNothing(filter) Then
l = list.Where(filter)
End If
Return l.ToList
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim A As New List(Of String) From {"Mathew", "Mark", "Luke", "John"}
Dim predicate As Func(Of String, Integer, Boolean) = Function(str, index) str.StartsWith("M")
Dim FilteredList = AddFilter(A, predicate)
For Each s As String In FilteredList
Debug.Print(s)
Next
End Sub
有些帖子中有一个答案可以推荐这个。
您可以使用Dynamic Linq:
Dim filter As String =“property1> 10 and property2 like'anystring'或property3 <= 25”。
昏暗的结果= Elements.Where(过滤器)。
但我不知道如何使用动态linq