1
PriceSetup
유형에 따라 인덱스에 다른 값을 저장해야합니다.RavenDB 인덱스에서 파생 된 유형에 대한 논리 검사를 사용하는 방법은 무엇입니까?
아래 코드를 시도합니다.
나는 완전히 자격을 갖춘 클래스 이름을 지정하려고 시도했습니다.
두 경우 모두 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
클래스는 매우 복잡하고 인텔리이 경우에 축복이기 때문에 내가 코드 인덱스 정의를 유지하고 싶습니다.
편집 : 작동하는 것 같다 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
}
}
}
공유 한 링크의 멀티 맵 예제는 다른 collecitons에 대한 멀티 맵 인덱스를 만드는 방법을 보여줍니다. 내 경우 모든 문서는 '거래'유형의 동일한 콜렉션에 있습니다. 멀티 테이블이 내 인덱스 정의에서'trade.PriceSetup.DailyPrice'를 사용할 수 없다는 것을 증명할 수있는 방법을 이해할 수 없습니다. – inwenis
내가 제공 한 편집을보기에 너무 친절하게 생각하니 이것이 효과가 있을지 아니면 완전히 틀린 것인지 알려주시겠습니까? – inwenis
동일한 컬렉션을 반복하여 매핑하고 'Raven-Clr-Type' 메타 데이터 속성을 기준으로 필터링하십시오. –