2016-04-14 2 views
2

Wie erkläre ich das (schlecht?)?Wieso bekomme ich solche seltsamen Ergebnisse von einem GroupJoin?

Ich habe eine Entität namens "Regel", die eine Reihe von "Selektoren" verwendet, um Elemente aus einem POCO [] auszuwählen. Es gibt eine festgelegte Anzahl von Feldern zur Auswahl. All dies ist detailliert in meinen Datenbankobjekten beschrieben.

Ich muss die Regel in einem Raster anzeigen, wobei jede Regel eine Zeile und jedes Feld in der POCO eine Spalte ist. Einige Zellen enthalten einen Selektor, andere nicht.

Ich habe mich entschieden fields.groupJoin (selectors.defaultIfEmpty) zu bekommen, den Zellinhalt muss ich verwenden:

var keyValuesS = 
    fields 
     .GroupJoin(
      SelectorView.Search(new SelectorViewFilter { RuleId = rule.Id }), 
      f => f.Id, 
      s => s.FieldId, 
      (f, g) => g 
      .Select(s => new { 
       key = f.Name + "_S", 
       value = GetToString(f, s) //gets the cell content html 
      }) 
     .DefaultIfEmpty(new { 
       key = f.Name += "_S", 
       value = "<div style='position:relative;height:100%;width:100%'></div>" }) //empty cell 
       ) 
     .SelectMany(g => g) 
     .ToDictionary(f => f.key, f => f.value); 

Was ich erwarte, ist ein Wörterbuch mit Schlüssel sein ‚[field] _s‘ für jedes Feld und Werte, die entweder der vollständige Zelleninhalt oder die leere Standardzelle sind.

Was ich eigentlich bekomme, ist die Zellen mit Selektoren sein '[field] _S_S' aber die Werte sind korrekt.

Fügen Sie hinzu, dass ich Union mit einer zweiten Tabelle, "Einsteller" (identisches Format zu 'Selektoren' aber Tasten haben _A) dann bekomme ich alle Arten von Chaos. Um Salz in der Wunde zu reiben, nennt mich mein eigener Code ein _A_S_S!

Ich habe ein ähnliches Format vor, aber es war 10x so lang, erstellt die HTML in Zeile, aber gearbeitet. Jetzt, da ich das Projekt überarbeitet habe, funktioniert die gleiche Logik nicht mehr.

Ich bin sicher, dass ich einen einfachen Fehler im Code nicht sehen kann. Bitte sagen Sie mir, damit ich peinlich sein und dann mit dem Projekt vorankommen^_^

FYI: hier ist die Methode, die Gewerkschaften einschließlich:

public static EditableRule PopulateByRule(Rule rule, Field[] fields) 
{ 
    var keyValuesA = 
     fields 
      .GroupJoin(
       AdjustmentView.Search(new AdjustmentViewFilter { RuleId = rule.Id }), 
       f => f.Id, 
       a => a.FieldId, 
       (f, g) => g 
        .Select(a => new { key = f.Name + "_A", value = GetToString(f, a) }) 
        .DefaultIfEmpty(new { key = f.Name += "_A", value = "<div style='position:relative;height:100%;width:100%'></div>" }) 
      ) 
      .SelectMany(g => g); 
    var keyValuesS = 
     fields 
      .GroupJoin(
       SelectorView.Search(new SelectorViewFilter { RuleId = rule.Id }), 
       f => f.Id, 
       s => s.FieldId, 
       (f, g) => g 
        .Select(s => new { key = f.Name + "_S", value = GetToString(f, s) }) 
        .DefaultIfEmpty(new { key = f.Name += "_S", value = "<div style='position:relative;height:100%;width:100%'></div>" }) 
      ) 
      .SelectMany(g => g); 
    var keyValuesBoth = keyValuesA.Union(keyValuesS); 

    var dictionary = keyValuesBoth.ToDictionary(f => f.key, f => f.value); 

    return new EditableRule(rule.Id, rule.DisplayText, dictionary); 

} 

Dank^_^

+0

können Sie einige Beispiele eingegeben und ausgegeben werden? – RePierre

Antwort

1

ich gerade gefunden meine dummen Fehler

Der DefaultIdEmpty Schlüssel hat „+ =“ sollte aber nur +> _ <

Verwandte Themen