Combining Lists using Concat

I have some code that's main purpose is to combine multiple like lists into one master list to return with the View.

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

I can see that the result object is populated as it should be in the debugger. I thought the Concat method would work to combine the lists, but my final values in the foreach loop never get updateincremented ( the list count remains zero ).

Is there another way to accomplish this, or am I having a morning brain fart? My question was not about the differences, as I was aware of them. I just had a momentary lapse of reason.


You likely want to use AddRange rather than Concat .

The former adds the data directly to the List. The latter concatenates data into a new IEnumerable.

But because you are not assigning the result of Concat to anything (ie var g = finalChangedColumns.Concat(result.ChangedColumns); ) your Concat calls do effectively nothing.


List<T>.AddRange(IEnumerable<T> collection) (link to info) probably does what you're looking for, right?

Adds the elements of the specified collection to the end of the List.

From documentation:

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
链接地址: http://www.djcxy.com/p/52754.html

上一篇: 为什么PHP版本比MySQL运行得更快?

下一篇: 使用Concat组合列表