私はRavenDBのマルチマップ/リダクションのコンセプトに苦しんでおり、最近マルチマップ/リダクションインデックスを正しく書く方法についてはthis questionと尋ねました。IList <T>マルチマップ/縮小結果ですか?
私はその質問で単純なインデックスを取得しましたが、もう少し複雑にしようとしたときには機能しません。私は何をしたいつまり、文字列のリストを格納するための指標の結果を持つことです。
class RootDocument {
public string Id { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
public IList<string> Items { get; set; }
}
public class ChildDocument {
public string Id { get; set; }
public string RootId { get; set; }
public int Value { get; set; }
}
class RootsByIdIndex: AbstractMultiMapIndexCreationTask<RootsByIdIndex.Result> {
public class Result {
public string Id { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
public IList<string> Items { get; set; }
public int Value { get; set; }
}
public RootsByIdIndex() {
AddMap<ChildDocument>(
children => from child in children
select new {
Id = child.RootId,
Foo = (string)null,
Bar = (string)null,
Items = default(IList<string>),
Value = child.Value
});
AddMap<RootDocument>(
roots => from root in roots
select new {
Id = root.Id,
Foo = root.Foo,
Bar = root.Bar,
Items = root.Items,
Value = 0
});
Reduce =
results => from result in results
group result by result.Id into g
select new {
Id = g.Key,
Foo = g.Select(x => x.Foo).Where(x => x != null).FirstOrDefault(),
Bar = g.Select(x => x.Bar).Where(x => x != null).FirstOrDefault(),
Items = g.Select(x => x.Items).Where(
x => x != default(IList<string>).FirstOrDefault(),
Value = g.Sum(x => x.Value)
};
}
}
基本的ChildDocumentsをマッピングするときに、私は(IListの)をデフォルトにItemsプロパティを設定しようとしたとの値にRootDocumentのItemsプロパティ。しかし、これはうまくいきません。無効なExprに
- ライン2 COL 324:ダブル.0.0を解析できません - ライン2 COL 285を
:それはリクエストに応じて、エラーメッセージ
エラーがクエリを理解できませんでした提供します
インデックスをアップロードするとき。マルチマップ/リダクションインデックスでリストを処理するにはどうすればよいですか?
私はちょうど私が格納できるものを指数化できると思っていました(そして、IListはうまくいきます)。 –