我需要的只是简单地检索存储在产品中的类别列表:
Products.Select(x => x.Category).Distinct().OrderBy(x => x);
当调用这个RavenDB
时,它说我应该使用索引,因为在查询过程中不允许进行计算。
我读了一些关于索引的文章,但仍然不明白我为什么要创建索引?
到目前为止,我尝试过的是:
初始化
public class DataAccessModule : NinjectModule {
public override void Load() {
Bind<IDocumentStore>().ToMethod(
context => {
var documentStore = new EmbeddableDocumentStore {
DataDirectory = @"~/App_Data/database",
UseEmbeddedHttpServer = true,
DefaultDatabase = "SampleStore"
};
var store = documentStore.Initialize();
IndexCreation.CreateIndexes(typeof(CategoriesIndex).Assembly, store);
return store;
}
).InSingletonScope();
Bind<IDocumentSession>().ToMethod(context =>
context.Kernel.Get<IDocumentStore>().OpenSession()
).InRequestScope();
}
}
索引定义
public class CategoriesIndex : AbstractIndexCreationTask<Product> {
public CategoriesIndex() {
Map = ct => ct.Select(x => x.Categories).Distinct().OrderBy(x => x);
}
}
但这行不通。我为什么要用正确的方式来定义它?
谢谢!
您可以使用:
var categories = Session.Query<Product>()
.Select(x => x.Category).Distinct().ToList().OrderBy(x=>x);
这会给你想要的。