我有一些代码,其主要目的是将多个相似的列表合并到一个主列表中,以便与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循环中的最终值永远不会得到更新\递增(列表计数保持为零)。
还有另一种方法可以实现这一目标,还是我早上有一个脑屁?我的问题不在于差异,正如我所知道的那样。我只是暂时失去理智。
答案 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