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 に答える