2014-10-21 6 views
0

에 같은 종류의 관련 문서를 병합하는 방법 :RavenDB - 다음 클래스 가정하면 인덱스 투사

public class Thing 
{ 
    public string Id { get; set; } 
    public string Title{ get; set; } 
    public string KeyId { get; set; } 
    public CultureInfo Culture { get; set; } 
} 

을 다음과 같은 결과 클래스 :

public class ProjectedThing 
{ 
    public string Id { get; set; } 
    public string Title{ get; set; } 
    public string KeyId { get; set; } 
    public CultureInfo Culture { get; set; } 
    public IEnumerable<Thing> Things { get; set; } 
} 

내가 보유하고 색인을 구축 할 수있는 방법 결과 클래스?

내가 왔어요 가장 가까운 다음 인덱스 정의와이다 : 거의 트릭을하고있어

public class ProjectedThings : AbstractIndexCreationTask<Thing,ProjectedThing> 
{ 
    public ProjectedThings() 
    { 
     Map = docs => from doc in docs 
        select new 
        { 
         Title = doc.Title, 
         KeyId = doc.KeyId, 
         Culture = doc.Culture, 
         Things = new[] { 
          new Thing{ 
           Id = doc.Id, 
           Title = doc.Title, 
           KeyId = doc.KeyId, 
           Culture = doc.Culture, 
           TitlePluralized = doc.TitlePluralized 
          } 
         } 
        }; 

     Reduce = results => from r in results 
          group r by r.KeyId into g 
          select new 
          { 
           Title = g.FirstOrDefault(x => x.Id == x.KeyId).Title, 
           KeyId = g.Key, 
           Culture = g.FirstOrDefault(x => x.Id == x.KeyId).Culture, 
           Things = from thing in g.SelectMany(x => x.Things).Where(x => x.Id != x.KeyId) 
               select new 
               { 
                Id = thing.Id, 
                Title = thing.Title, 
                KeyId = thing.Key, 
                Culture = thing.Culture 
               } 
          }; 
    } 
} 

,하지만 난이 감소 제목, -a Keyid 키 ID, 문화를 수집 할 수 없습니다. Things 속성 만 채워집니다. 코드에서

답변

0

봐 :

g.FirstOrDefault(x => x.Id == x.KeyId) 

나는 이것을 이해하지 않는다, 그러나 이것은 항상 false가 될 가능성이 높습니다. 원할 것 :

g.FirstOrDefault().Title,