2

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

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

但这不起作用。我如何以正确的方式定义它?

谢谢!

4

1 回答 1

3

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

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

这会给你你想要的。

于 2012-07-16T21:07:15.540 回答