如何使用Distinct操作创建索引.RavenDB



我需要的只是简单地检索存储在产品中的类别列表:

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);

这会给你想要的。

最新更新