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

时间:2012-07-16 10:04:40

标签: c# indexing 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);
    }
}

但这不起作用。 我怎么用正确的方式定义它?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用以下方式执行此操作:

var categories = Session.Query<Product>()
                   .Select(x => x.Category).Distinct().ToList().OrderBy(x=>x);

这会给你你想要的东西。