C# 如何在RavenDB索引中对派生类型使用逻辑检查?
我需要根据C# 如何在RavenDB索引中对派生类型使用逻辑检查?,c#,ravendb,C#,Ravendb,我需要根据PriceSetup的类型在索引中存储不同的值 我尝试了下面的代码 我已经试过使用完全限定的类名 在这两种情况下,当我尝试创建索引时,RavenDB告诉我它找不到类型FixedPriceSetup 如何根据PriceSetup的类型在索引中存储不同的值 public class Trade { public PriceSetup PriceSetup; } public abstract class PriceSetup { public int TotalPrice
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
}
}
}
服务器上不存在该类型,因此会出现此错误。 然而,这是一个使用多重贴图的好地方。
您共享的链接中的multimap示例演示了如何为不同的Collections创建multimap索引。就我而言,所有文档都在同一个集合中,类型为
Trade
。我不明白multimap如何解决我无法在索引定义中使用trade.PriceSetup.DailyPrice
的问题。请查看我提供的编辑,并告诉我这是否有效,或者这是否完全错误?您可以重复映射同一个集合,并基于元数据属性进行筛选Raven Clr Type
如果所有文档都属于同一类型-Trade
,如何基于元数据属性进行筛选?我认为这是不可能的。
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
}
}
}