2017-12-04 24 views
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 
      } 
    } 
} 

답변

1

이 유형은이 오류가 왜 서버에 존재하지 않습니다. 그러나 이것은 멀티 맵을 사용하기에 좋은 곳입니다. https://ravendb.net/docs/article-page/3.5/Csharp/indexes/multi-map-indexes

+0

공유 한 링크의 멀티 맵 예제는 다른 collecitons에 대한 멀티 맵 인덱스를 만드는 방법을 보여줍니다. 내 경우 모든 문서는 '거래'유형의 동일한 콜렉션에 있습니다. 멀티 테이블이 내 인덱스 정의에서'trade.PriceSetup.DailyPrice'를 사용할 수 없다는 것을 증명할 수있는 방법을 이해할 수 없습니다. – inwenis

+0

내가 제공 한 편집을보기에 너무 친절하게 생각하니 이것이 효과가 있을지 아니면 완전히 틀린 것인지 알려주시겠습니까? – inwenis

+0

동일한 컬렉션을 반복하여 매핑하고 'Raven-Clr-Type' 메타 데이터 속성을 기준으로 필터링하십시오. –