在System.Collections.Generic.SortedList上实现Where()扩展方法

时间:2009-09-09 02:51:00

标签: .net .net-3.5

我有一个包含订单商品集合的私有类变量:

Private _Items As New System.Collections.Generic.SortedList(Of Integer, OrderItem)

我正在尝试做什么使用IEnumerable的.Where()扩展方法(我认为)通过类上的属性获取和设置项目的子集。有点像:

Public Property StandardItems() As SortedList(Of Integer, OrderItem)
    Get
        Return _Items.Where(Function(ItemID As Integer, Item As OrderItem) Item.ItemType = "SomeValue")
    End Get
    Set(ByVal value As SortedList(Of Integer, OrderItem))
        _Items = value
    End Set
End Property

这可能吗?如果是这样,我将如何实现它?我对MSDN文档,Visual Studio智能感知或反复试验没有太多好运。

1 个答案:

答案 0 :(得分:1)

Where扩展方法返回IEnumerable(Of KeyValuePair(Of Integer, OrderItem))。您可以将属性的类型更改为。

如果您需要返回已排序的列表,则必须从Where方法的输出中手动创建:

Dim whereQuery = ...
Return New SortedList(Of Integer, OrderItem)(whereQuery _
                      .ToDictionary(Function(x) x.Key, Function(x) x.Value))

我有点担心你的二传手的行为。您想通过该属性替换整个排序列表吗?它的名字说它只是标准物品(过滤的一组物品),但设置它会改变所有物品。