使用Concat组合列表

时间:2017-07-10 13:24:41

标签: c# asp.net-mvc-4

我有一些代码,其主要目的是将多个相似的列表合并到一个主列表中,以便与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);

我可以看到结果对象已填充,因为它应该在调试器中。我认为Concat方法可以合并列表,但是我在foreach循环中的最终值永远不会得到更新\递增(列表计数保持为零)。

还有另一种方法可以实现这一目标,还是我早上有一个脑屁?我的问题不在于差异,正如我所知道的那样。我只是暂时失去理智。

2 个答案:

答案 0 :(得分:1)

您可能希望使用AddRange而不是Concat

前者将数据直接添加到List。后者将数据连接成新的IEnumerable。

但是因为您没有将Concat的结果分配给任何内容(例如var g = finalChangedColumns.Concat(result.ChangedColumns);),您的Concat来电

答案 1 :(得分:1)

List<T>.AddRange(IEnumerable<T> collection)link to info)可能会做你想要的,对吗?

  

将指定集合的​​元素添加到List的末尾。

来自文档:

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