如何将列表中的多个更改保存回我的数据库?

How to persist multiple changes in a list back to my database?

我有一大批客户。下面是一些示例数据

Id Name  Age PriorityLevel
1  Bill  50   1
2  Adam  40   2
3  Cory  60   3
4  Edgar 20   4

我想交换这个列表中的项目,所以使用了这个代码

public static List<T> Swap<T>(this List<T> list, int indexA, int indexB)
    {
        T tmp = list[indexA];
        list[indexA] = list[indexB];
        list[indexB] = tmp;
        return list;
    }

调用代码

List<Customer> cusList = _uow.Customers.GetAll();
cusList.Swap(ddlItem1.SelectedValue, ddlItem2.SelectedValue); 
_uow.Save(); 

当上面的代码是 运行 时,它交换列表中的项目而不是 PriorityLevel 的值。

如果我要将第二个项目与第一个项目交换,上面的代码会按以下方式执行(请注意记录的 ID,它们如何保持不变但顺序发生变化 - 无论如何在调试模式下)

Id Name  Age PriorityLevel
2  Adam  40   2
1  Bill  50   1

但我想要它所以它会执行以下操作(注意优先级)

Id Name  Age PriorityLevel
1  Bill  50   2
2  Adam  40   1

这怎么可能?

这是交换列表条目的通用代码。你需要更具体的东西

public static void SwapPriorities(this List<Customer> list, int indexA, int indexB)
{
    int tmp = list[indexA].Priority;
    list[indexA].Priority = list[indexB].Priority;
    list[indexB].Priority = tmp;
    return list;
}

或者干脆

public static void SwapPriorities(Customer customerA, Customer customerB)
{
    int tmp = CustomerA.Priority;
    customerA.Priority = customerB.Priority;
    customerB.Priority = tmp;
}

当您使用“交换”时,您正在进行“交换列表中的索引位置”操作。

您只是要求交换优先级列表中的值。

简单写:

public void SwapPriorityValues(Customer source, Customer target)
{
   var tmpValue = source.PriorityLevel;
   source.PriorityLevel = target.PriorityLevel;
   target.PriorityLevel = tmpValue;
}

和你的两个客户一起打电话。