1
PriceSetup
のタイプに基づいて異なる値をインデックスに格納する必要があります。RavenDBインデックスの派生型の論理チェックを使用するにはどうすればよいですか?
私は以下のコードを試しています。
私はalosが完全修飾クラス名を指定しようとしました。
どちらの場合も、インデックスを作成しようとすると、FixedPriceSetup
というタイプが見つからないことがRavenDBによってわかります。
PriceSetup
の種類に基づいてインデックスに異なる値を保存するにはどうすればよいですか?
public class Trade
{
public PriceSetup PriceSetup;
}
public abstract class PriceSetup
{
public int TotalPrice;
}
public class FixedPriceSetup : PriceSetup
{
public int DailyPrice;
}
public class FlexiblePriceSetup : PriceSetup
{
//...some other stuff
}
public class TradeSearchIndex : AbstractIndexCreationTask<Trade>
{
public TradeSearchIndex()
{
Map = trades =>
from trade in trades
select new
{
TotalPrice = trade.PriceSetup is FixedPriceSetup
? Math.Abs(trade.PriceSetup.TotalPrice) * Math.Sign((trade.PriceSetup as FixedPriceSetup).DailyPrice)
: trade.PriceSetup.TotalPrice
}
}
}
Trade
クラスは非常に複雑であり、インテリセンスが、この場合は祝福ですので、私はコード内のインデックス定義を維持したいと思います。
編集: コードbeloewが動作しているようです:
public class TradeSearchIndex : AbstractIndexCreationTask<Trade>
{
public TradeSearchIndex()
{
Map = trades =>
from trade in trades
select new
{
TotalPrice =
AsDocument(trade.PriceSetup)["$type"].ToString() == "RavenTest.FixedPriceSetup, RavenTest"
? Math.Abs(trade.PriceSetup.TotalPrice) * Math.Sign(AsDocument(trade.PriceSetup)["DailyPrice"].Value<int>)
: trade.PriceSetup.TotalPrice
}
}
}
共有したリンクのマルチマップの例は、さまざまなコラボレーションのマルチマップインデックスを作成する方法を示しています。私の場合、すべての文書は「貿易」タイプの同じコラプションにあります。私はマルチマップが私のインデックス定義で 'trade.PriceSetup.DailyPrice'を使うことができないということを、どのようにして解決するのか分かりません。 – inwenis
私が提供した編集を見て、これがうまくいくか、これが完全な間違っているかを教えてください。 – inwenis
メタデータプロパティー 'Raven-Clr-Type'に基づいて同じコレクションを繰り返し、フィルタリングすることができます –