にビューに文書を平坦化しますクライアントアプリケーションで必要な構造に変換されたデータを含むビューの望ましい結果を生成します。しかし、それは実際には冗長であり、メンテナンスの悪夢となり、すべての冗長なオブジェクト構築ではかなり効率が悪いでしょう。最も簡単な方法は、以下のクラスを考えるとRavenDB
文書(DocA)のコレクションがあれば、必要な構造(ViewA)でインデックスを作成する簡単な方法はありますか?
さらに詳しい情報 問題は、インデックスが変態組織(ViewA)にデータを保持させるために、我々は削減をしなければならないということであるように思われます。
INVALID CLAUSE 1 REDUCE::これは生産
Reduce = results => from result in results
group on new ViewA
{
Id = result.Id,
Name = result.Name,
CurrencyName = result.CurrencyName
} into g
select g.Key;
を:システムには、以下が有効ではありませんので、削減が期待どおりに動作するために、GROUP ONとSELECTの両方を持たなければならないことが表示されます。 InvalidOperationException:変数のイニシャライザ選択に、オブジェクト作成式を持つラムダ式が必要です。
明らかに「select new」が必要です。これはprduces
Reduce = results => from result in results
select new ViewA
{
Id = result.Id,
Name = result.Name,
CurrencyName = result.CurrencyName
};
:System.InvalidCastExceptionの:型のオブジェクトをキャストすることができません 'ICSharpCode.NRefactory.Ast.IdentifierExpression'「をICSharpCode.NRefactory.Ast.InvocationExpressionを入力する
INVALID句2をREDUCE '
明らかに、私たちも 'group on new'を持っている必要があります。
ご協力いただきありがとうございます。
(注:コンストラクタ呼び出しからタイプ(ViewA)を除去して上記には影響ありません)正しいアプローチで
UPDATEを
ここでは、以下の回答で述べたダニエルさんのブログで概説したように
public class A_View : AbstractIndexCreationTask<DocA, ViewA>
{
public A_View()
{
Map = docs => from doc in docs
select new ViewA
{
Id = doc.Id,
Name = doc.Name,
CurrencyName = doc.Currency.Name
};
// Top-level properties on ViewA that match those on DocA
// do not need to be stored in the index.
Store(x => x.CurrencyName, FieldStorage.Yes);
}
}
ありがとう@Phill。私はここにあった他の答えに何が起こったのか分かりません... –