2012-01-26 2 views
1

나는 다음과 같은 인덱스를 만든 null로 변환 할 수 없습니다 : 문자열이

public class LawDisadvantagesForListIndex : AbstractIndexCreationTask<LawDisadvantage, LawDisadvantagesForListIndex.IndexResult> 
{ 
    public class IndexResult 
    { 
     public string Id { get; set; } 
     public long Rating { get; set; } 
    } 

    public class LawDisadvantageForList 
    { 
     public string Id { get; set; } 
     public long Rating { get; set; } 
     public long CommentsCount { get; set; } 
    } 

    public LawDisadvantagesForListIndex() 
    { 
     Map = lawDisadvantages => from lawDisadvantage in lawDisadvantages 
            from vote in lawDisadvantage.Votes 
            select new {Id = lawDisadvantage.Id, Rating = vote.Value}; 

     Reduce = (lawDisadvantages => from lawDisadvantage in lawDisadvantages 
             group lawDisadvantage by lawDisadvantage.Id 
             into agg 
             select new 
               { 
                Id = agg.Key, 
                Rating = agg.Sum(x => x.Rating) 
               }); 

     TransformResults = (database, indexResults) => from indexResult in indexResults 
                 let lawDisadvantage = database.Load<LawDisadvantage>(indexResult.Id) 
                 select new 
                    { 
                     Id = lawDisadvantage.Id, 
                     Rating = indexResult.Rating, 
                     CommentsCount = lawDisadvantage.Comments.Count 
                    }; 
    } 
} 

그래서 나는 맵리 듀스에 의해, 그것을 과정을 LawDisadvantage 문서를 가지고 다음 변환하여 몇 가지 추가 필드를 추가 할 수 있습니다. 그러나 결과로 예외 메시지 "System.InvalidOperationException : 변환 결과 함수가 실패했습니다. Doc '', 오류 : 형식 'string'을 'long'"으로 변환 할 수 없습니다. " 예외 소스는 "indexResult.Rating"절입니다.

다만, this 질문과 관련이 있습니다.

업데이트. 불안정한 버전을 마지막으로 업데이트했습니다. 고정되어 있습니다.

답변

1

인덱스에서 수행해야하는 캐스팅은 오래 전부터 RavenDB에서 성가신 문제였습니다. 당신의 글이 텍스트에서 코드로 변환되는 장면의 뒤에서. 그러나 유연하게 (스키마가없는) 동적 유형을 사용하기 때문에 유연한 캐스팅이 필요합니다.

이 모든 것을 언급 했으므로 코드가 최근에 정밀 검사를 받았으므로이 문제가 더 이상 표시되지 않습니다. 자세한 내용은 this thread을 참조하십시오.