わかりましたので、dbからプルしたList list1があり、これをList list2に一時的に保存し、list1で何らかの操作を実行してdbに保存し、list2で遊んでdbに保存します。問題は、list1 のいくつかのフィールドを変更すると is が参照渡しされるため、list2 が既に更新されていることです。
リスト全体を参照ではなく値として渡す方法はありますか?
わかりやすくするためのコードを次に示します。
var CurrentMenuItems = dbContext.menu_items.Where(m => m.optgroup == currentGroup && m.day_id == menuItem.day_id).ToList();
List<menu_item> MenuItemsToBeEditedAfterSubmitChanges = CurrentMenuItems;// we need to store this by value, so we can update it later
byte ItemIncrease = 50; // To store temp value so we can avoid duplicate entry for item number
foreach (var item in CurrentMenuItems)
{
item.optgroup = nextGroup;
item.item = ItemIncrease;
ItemIncrease++;
}
var menuItemsToBeReplaced = dbContext.menu_items.Where(m => m.optgroup == nextGroup && m.day_id == menuItem.day_id).ToList(); // we want to move all items within this group
dbContext.SubmitChanges();
foreach (var item in menuItemsToBeReplaced)
{
item.optgroup = currentGroup;
item.item = (byte)(item.item - 1);
}
dbContext.SubmitChanges();
// After first save, update the first group of menu items
foreach (var item in MenuItemsToBeEditedAfterSubmitChanges)
{
item.optgroup = nextGroup;
item.item = (byte)(item.item + 1);
}
dbContext.SubmitChanges();