2016-04-14 10 views
2

どうすれば説明できますか(ひどく)?なぜGroupJoinからこのような奇妙な結果が得られますか?

私は、POCO []からアイテムを選ぶために使用されるいくつかの「セレクタ」である「ルール」と呼ばれるエンティティを持っています。選択できるフィールドの数は設定されています。これらのすべては私のデータベースオブジェクトで詳しく説明されています。

各ルールが行であり、POCOの各フィールドが列であるルールをグリッドに表示する必要があります。一部のセルにセレクタが含まれ、一部のセルにはセレクタが含まれます。

私は私が必要とするセルの内容を取得するためにfields.groupJoin(selectors.defaultIfEmpty)を使用することを選択した:私は何を期待

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); 

はキーがすべてのフィールドのための「[フィールド] _S」が持つ辞書です値は完全なセルの内容またはデフォルトの空のセルのいずれかです。

私が実際に得ているのは、セレクタが '[field] _S_S'のセルですが、値は正しいです。

2つ目のテーブル 'アジャスター'(「セレクタ」と同じフォーマットですが、キーには_Aが付いています)を追加すると、すべての種類の混乱が生じます。傷の中で塩をこするために、私のコードは私を_A_S_Sと呼んでいます!

私は前に似たフォーマットを持っていましたが、それは10倍長かったので、ラインでhtmlを作成しましたが効果がありました。リファクタリングしたので、同じロジックはもはや同じように動作しません。

コードで単純なエラーが表示されないようにする必要があります。 FYI

^_ ^私は恥ずかしいことして、プロジェクトに乗ることができますので、教えてください:ここでは労働組合を含む方法である:

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); 

} 

おかげで^ _^

+0

あなたはいくつかのサンプルの入力と出力を提供することができますする必要がありますか? – RePierre

答えて

1

私はちょうど見つけ私の愚かなエラー

はDefaultIdEmptyキーは、「+ =」ちょうど+> _ <

関連する問題