从内存数据集中筛选和查找

时间:2010-03-09 15:43:42

标签: .net indexing in-memory

我在内存中有几个中型数据集,我需要能够快速过滤和查找信息。数据集足够小,以至于每次我需要一个条目时,我都不希望每次进入数据库时​​遇到性能损失,但是我确实需要以某种方式索引数据。

目前,我正在使用带有一个或多个词典的POCO对象进行索引。当我需要通过特定键找到某些东西时,这非常有效,但有时情况并非如此。例如,我经常需要在特定的日期 - 时间范围内找到一个条目。有时我需要价格最低的入场券。大多数情况下,查询会同时查看几个简单的键和一个或两个其他字段。

是否有任何工具,产品,库(针对.NET框架)可以帮助我解决这个问题?或者我是否需要拿起那本尘土飞扬的旧算法书并开始查看搜索树?

一个例子:

旅行

  • DepartureCode
  • DestinationCode
  • HotelCode
  • RoomCode
  • 日期
  • 价格

我需要查询类似于“让我在2010-03-09和2010-03-12之间获得最便宜的旅行,其中DepartureCode = LAX DestinationCode = NYC”

2 个答案:

答案 0 :(得分:2)

“最低价格”和“特定日期/时间范围”都可以仅使用已排序的集合和二进制搜索来处理。 SortedList / SortedDictionary(或SortedSet如果您使用的是.NET 4.0)可能会在此处执行您需要的所有操作,只需要相当少的工作量。

答案 1 :(得分:0)

DataSet.Table(“YourTable”).Select()方法怎么样?

Dim myRows() as DataRow = myDataSet.Tables("myTable").Select("Date>" & _
    myBeginDate & "AND Date<" & myEndDate)

编辑:来自MSDN

  

DataView构建

     

DataView为其构建索引   底层DataTable中的数据   DataView都是创建的,以及何时创建   Sort,RowFilter或RowStateFilter   属性被修改。创建时   一个DataView对象,使用DataView   采用Sort的构造函数,   RowFilter和RowStateFilter值   作为构造函数参数(以及   基础DataTable)。结果   索引是一次构建的。创建   一个“空”DataView并设置   Sort,RowFilter或RowStateFilter   后来的属性导致了   索引建立至少两次。

因此,如果您想索引DataSet,看起来DataView可以为您提供。