2017-07-10 13 views
0

私はいくつかのコードを持っています。主な目的は、複数の同様のリストを1つのマスターリストにまとめてViewに戻すことです。Concatを使用したリストの結合

ActivityAuditDetails searchParams = new ActivityAuditDetails(); 
    ActivityAuditDetails finalResults = new ActivityAuditDetails(); 
    List<string> finalChangedColumns = new List<string>(); 
    List<string> finalOldValues = new List<string>(); 
    List<string> finalNewValues = new List<string>(); 
    string finalAuditAction = string.Empty; 

    List<int> auditKeys = AuditIdentityId.Split(',').Select(int.Parse).ToList(); 
    string url = "/Audit/GetActivityAuditDetails"; 

    try 
    { 
     foreach (int auditKey in auditKeys) 
     { 
      searchParams.AuditIdentityId = auditKey; 
      ActivityAuditDetails result = // SOME METHOD THAT RETURNS RESULTS AS IT SHOULD; 

      finalChangedColumns.Concat(result.ChangedColumns); 
      finalAuditAction = result.AuditAction; 
      finalOldValues.Concat(result.OldValues); 
      finalNewValues.Concat(result.NewValues); 
     } 

     finalResults.ChangedColumns = finalChangedColumns; 
     finalResults.AuditAction = finalAuditAction; 
     finalResults.OldValues = finalOldValues; 
     finalResults.NewValues = finalNewValues; 

    } 
    catch (Exception e) 
    { 
     e.ToLog(); 
    } 
    return View(finalResults); 

私は結果オブジェクトがデバッガにある必要があるように読み込まれていることがわかります。私はConcatメソッドがリストを結合するように働くと思っていましたが、foreachループの最終的な値はupdate \ incremented(リストの数はゼロのままです)を得ることはありません。

これを達成する別の方法はありますか、私は朝の脳のおならですか?私が知っていたように、私の質問は違いについてではありませんでした。私はちょうど理性の瞬間がありませんでした。

+2

私は 'Concat'は新しい値を返すことを考えて,,しかし、あなたはそれ – devqon

+0

と何もしない何がupvoteを取得するためにしなければならないのですか? (私はdownvoteを得ていないとうれしいですね) –

+0

@mjwills実際には重複していません、私は違いを知っていた、私は実装に関して間違いを犯しました。 :-) –

答えて

1

ConcatではなくAddRangeを使用します。

前者は、データを直接リストに追加します。後者は、新しいIEnumerableにデータを連結します。

しかし、あなたは何にConcat(すなわちvar g = finalChangedColumns.Concat(result.ChangedColumns);)の結果を代入していないので、あなたのConcat呼び出しが効果的何もしません。

+1

https://stackoverflow.com/questions/100196/net-listt-concat-vs-addrangeに詳細があります。 – mjwills

+1

「基本的に何もしない」実際には*何かが行われますが、OPは結果を省略します。 – HimBromBeere

+0

くそ、脳のおなら。 @HimBromBeere –

1

List<T>.AddRange(IEnumerable<T> collection)link to info)は、おそらくあなたが探しているものはありますか?

リストの最後に指定されたコレクションの要素を追加します。ドキュメントから

string[] input = { "Brachiosaurus", 
        "Amargasaurus", 
        "Mamenchisaurus" }; 

List<string> dinosaurs = new List<string>(); 
dinosaurs.AddRange(input); 
//The list now contains all dinosaurs from the input string array 
+0

うん、私の朝の脳のおなら。 –

関連する問題