快速查询对象集合

时间:2012-09-25 01:11:17

标签: c# .net

我正在寻找一个可以接受对象集合的库,并返回一个为快速查询而优化的索引数据结构。

示例可能更好地说明了这一点:

public class MyClass
{
    public sting Name {get;set;}
    public double Number {get;set;}
    public ... (Many more fields)
}     


var dataStore = Indexer.Parse(myClassCollection).Index(x => x.Name).Index(x => x.Number).Index( x => x.SomeOtherProperty);
var queryResult = dataStore.Where( x => x.Name == "ABC").Where(x => x.Number == 23).Where( x => x.SomeOtherProperty == dateTimeValue);

我们的想法是dataStore上的查询速度非常快,大约为O(log n)

当您想要索引超过2个或3个字段时,使用字典词典开始变得复杂。

是否存在已经存在的类似这样的库?

4 个答案:

答案 0 :(得分:2)

object oriented database怎么样?

Sterling是推荐选项。它支持LINQ to Object,所以不用担心查询,我们已经将它用于几个具有良好结果的中型项目(它非常快)。

答案 1 :(得分:1)

你也应该看一下RaptorDB。可以在CodeProject here上找到多个版本,包括完全嵌入的版本。

答案 2 :(得分:0)

你可以使用Lucene.NET,它也可以在内存中完全运行(虽然我不确定这是你想要的)。它支持基于现场标准快速检索文档。

这实际上为您提供了一个文档数据库。如果你更进一步,最终会得到类似RavenDB(商业)的东西。

答案 3 :(得分:0)

我想知道我们是否可以通过为每个索引属性创建一个SortedDictionary来实现这一点。

SortedDictionary<property, List<MyClass>>

然后解析Linq表达式树以找出正在查询的属性。我们可以检索sortedDictionaries的有效键,然后遍历这些键以获取每个已排序字典的List,然后使用Set操作(如Union()和Intersect(),具体取决于表达式树是否具有OR或AND指令。 然后返回与搜索条件匹配的列表。

如果查询包含未编制索引的属性,请先使用索引属性执行查询,然后使用普通Linq完成查询。

然后有趣的是解析表达式树。

有关这种方法的任何想法吗?