如何过滤通用对象列表

时间:2019-04-07 14:53:18

标签: vb.net list linq-to-objects

我找到了实现可扩展BindingList的SortableBindingList的代码,并且从理论上讲,它可以排序和过滤通用对象列表。 可以很好地对列表进行排序,但是我无法过滤。

过滤器代码如下

0

问题是以下示例在子句中像过滤器一样接收字符串,但是由于它等待一个函数,因此编译会出错 我不知道该如何解决

抱歉,如果您不太了解。我的英语说得不好

2 个答案:

答案 0 :(得分:2)

您需要传递一个谓词。我希望这个例子能指导您。

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

答案 1 :(得分:0)

在某些帖子中有一个建议这样做的答案。

您可以使用Dynamic Linq:

暗淡过滤器,如String =“ property1> 10和property2,例如'anystring'或property3 <= 25”。

昏暗的结果= Elements.Where(filter)。

但是我不知道如何使用动态linq