2016-10-28 2 views
2

ich den folgenden Code haben:RavenDB: Wie behebe ich diese Map Code reduzieren? Ich erhalte NULL-Werte, wo ich erwarte Ergebnisse

public class WorkOrderByUserId : AbstractMultiMapIndexCreationTask<WorkOrderByUserId.Result> 
{ 
    public WorkOrderByUserId() 
    { 
     this.AddMap<WorkOrder>(items 
      => from item in items 
       select new Result 
       { 
        OwnerId = item.OwnerId, 
        WorkOrder = new WorkOrderLookupDto 
        { 
         Id = item.Id, 
         Name = item.EventName 
        }, 
        WorkOrders = null 
       }); 

     this.AddMap<Invoice>(items 
      => from item in items 
       select new Result 
       { 
        OwnerId = item.WorkOrder.OwnerId, 
        WorkOrder = new WorkOrderLookupDto 
        { 
         Id = item.WorkOrder.Id, 
         Name = item.WorkOrder.EventName 
        }, 
        WorkOrders = null 
       }); 

     this.Reduce = results => from result in results 
      group result by result.OwnerId 
      into g 
      select new Result 
      { 
       OwnerId = g.Key, 
       WorkOrders = g.Select(x => x.WorkOrder), 
       WorkOrder = null 
      }; 

     this.Indexes.Add(x => x.OwnerId, FieldIndexing.Default); 
    } 

    public class Result 
    { 
     public string OwnerId { get; set; } 

     public IEnumerable<WorkOrderLookupDto> WorkOrders { get; set; } 

     public WorkOrderLookupDto WorkOrder { get; set; } 
    } 
} 

Es mir sehr nahe kommt, wo ich sein möchte, aber ich scheine etwas zu fehlen, und ich bin Informationen verlieren und ich bin mir nicht sicher warum.

Mit der Map/Reduce Visualizer Ich bemerke die MAP die Ergebnisse anzeigt (dh Arbeitsaufträgen gefüllt ist, und Workorder ist null)

Map/Reduce Visualizer

Als dieser Stelle ich eine Reihe von Artikeln haben erwartete mit NULL WorkOrders und einem gültigen WorkOrder, von dem erwartet wurde, dass ich ihn in die WorkOrders-Sammlung reduziere.

Wenn ich mir die endgültige Reduzierung im Visualizer anschaue, bemerke ich, dass meine WorkOrder NULL ist und meine WorkOrders vollständig fehlen.

Reduce

Und wenn ich auf das Endergebnis des Index sehe ich sehen, was ich suche, nur ohne die eigentlichen Daten, die ich suche.

enter image description here

Was muß ich meine letzten Arbeitsaufträgen NULL zu sein, um nicht zu erhalten ändern?

Antwort

0

konnte ich mein gewünschtes Ergebnis mit dem folgenden Code erhalten:

public class WorkOrderByUserId : AbstractMultiMapIndexCreationTask<WorkOrderByUserId.Result> 
{ 
    public WorkOrderByUserId() 
    { 
     this.AddMap<WorkOrder>(items 
      => from item in items 
       select new Result 
       { 
        OwnerId = item.OwnerId, 
        WorkOrders = new[] 
        { 
         new WorkOrderLookupDto 
         { 
          Id = item.Id, 
          Name = item.EventName 
         } 
        } 
       }); 

     this.AddMap<Invoice>(items 
      => from item in items 
       select new Result 
       { 
        OwnerId = item.WorkOrder.OwnerId, 
        WorkOrders = new[] 
        { 
         new WorkOrderLookupDto 
         { 
          Id = item.WorkOrder.Id, 
          Name = item.WorkOrder.EventName 
         } 
        } 
       }); 

     this.Reduce = results => from result in results 
      group result by result.OwnerId 
      into g 
      select new Result 
      { 
       OwnerId = g.Key, 
       WorkOrders = g.SelectMany(x => x.WorkOrders) 
      }; 

     this.Indexes.Add(x => x.OwnerId, FieldIndexing.Default); 
    } 

    public class Result 
    { 
     public string OwnerId { get; set; } 

     public IEnumerable<WorkOrderLookupDto> WorkOrders { get; set; } 
    } 
} 
+0

Es wäre gut, deine Antwort als die richtige Antwort zu markieren;) –

+0

anscheinend muß ich 2 Tage warten, bevor ich tun kann, dass ;) – user1265146

Verwandte Themen