我需要根据PriceSetup
的类型在索引中存储不同的值。
我试过下面的代码。
我已经尝试过完全符合条件的类名。
在这两种情况下,当我尝试创建索引时,RavenDB告诉我找不到类型FixedPriceSetup
。
如何根据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
类非常复杂,在这种情况下intellisense是一种祝福。
编辑: 代码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
}
}
}
答案 0 :(得分:1)
服务器上不存在类型,这就是您收到此错误的原因。 但是,这是一个使用多地图的好地方。 https://ravendb.net/docs/article-page/3.5/Csharp/indexes/multi-map-indexes