我使用页面模型创建了 2 个单独的列表,如下所示:
@model IEnumerable<Batch>
@{
ViewBag.Title = "Batches";
bool FirstEveningBatch = true;
List<Batch> WeekDaysBatch = new List<Batch>(Model.ToList());
List<Batch> WeekEndBatch = new List<Batch>(Model.ToList());
}
现在我使用第一个列表调用扩展方法,如下所示
@foreach (var item in WeekDaysBatch.Where(x => !x.IsWeekendBatch).AppendBatchNumber())
{
// ... some code ...
}
这里是
AppendBatchNumber()
扩展方法:
public static IEnumerable<Batch> AppendBatchNumber(this IEnumerable<Batch> batches)
{
bool IsFirstEveningBatch = true;
int batchnumber = 0;
Batch[] batchesArray = batches.OrderBy(x=> x.StartTime).ToArray();
for (int i = 0; i < batchesArray.Length; i++)
{
if (batchesArray[i].Name.StartsWith("Evening") && IsFirstEveningBatch)
{
batchnumber = 0;
IsFirstEveningBatch = false;
}
batchesArray[i].Name = string.Format("{0}-{1}", batchesArray[i].Name, ++batchnumber);
}
return batchesArray;
}
但是第二个列表
WeekEndBatch
也正在改变。有什么办法可以避免第二个列表被更改吗?
这是
Batch
课程:
public class Batch
{
public int Id { get; set; }
public string Name { get; set; }
[NoBatchAfter9PM]
public TimeSpan StartTime { get; set; }
[NoBatchAfter9PM]
public TimeSpan EndTime { get; set; }
public string? Description { get; set; }
[Display(Name="Is it a Weekend batch?")]
public bool IsWeekendBatch { get; set; }
[Display(Name = "Is it a Women's batch?")]
public bool IsWomenBatch { get; set; }
public ICollection<Learner>? Learners { get; set; }
public Coach? Coach { get; set; }
}
两个列表都更新的原因是您回调的 Model 对象是被引用的,实际上并不是一个副本。您将需要创建它的克隆,就像这里提到的那样 - 使用 Clone() 复制 ASP.NET MVC / EntityFramework 模型对象
然后会发生的情况是,您拥有对象的副本,而不是实际的对象本身。如果您想修改原始对象,我不知道这对您的情况是否有帮助,但如果是这样,只需在 WeekDaysBatch 中使用 Model.ToList ,然后在 WeekEndBatch 中使用克隆来执行您想要执行的任何临时工作。