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
            }
    }
}