【发布时间】:2019-04-07 14:53:18
【问题描述】:
我找到了实现扩展 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
问题在于,下面的示例像过滤器一样接收子句中的字符串 where 但编译时出现错误,因为它等待函数 我不知道如何解决这个问题
抱歉,如果您不太了解。我英语不好
【问题讨论】:
-
Where子句需要一个Function(item as T)(其中 T 是_originalData中的项目的类型),它返回一个Boolean结果。您将需要可以解析_filter并将其表示的逻辑处理为Boolean结果的函数。这不是一件容易的事。一种更简单的方法(但仍然需要大量工作)是向用户提供一个表单,该表单允许他们选择在T上定义的属性,一个要应用的比较运算符,并输入一个值来比较该属性。这样做会限制表达式评估代码中需要考虑的可能性。 -
继续.. 如果您熟悉 MS Excel,请查看他们如何通过显示带有下拉菜单的对话框来定义自定义自动筛选。
标签: vb.net list linq-to-objects