我正在寻找一个可以接受对象集合的库,并返回一个为快速查询而优化的索引数据结构。
示例可能更好地说明了这一点:
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个字段时,使用字典词典开始变得复杂。
是否存在已经存在的类似这样的库?
答案 0 :(得分:2)
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完成查询。
然后有趣的是解析表达式树。
有关这种方法的任何想法吗?