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

Time:03-15

I have a large list of customers. Below is some sample data

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

I want to swap the items in this list, so have used this code

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;
    }

Calling code

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

When the above code is run, it swaps the item in the list but not the values for PriorityLevel.

If i was to swap the second item with the first item, the above code does it but in the following way (Note the ID of the record how they remain the same but order changes - in debug mode anyway)

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

but i want to have it so it does the below (Note the priority level)

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

How is this possible?

CodePudding user response:

That's general code for swapping list entries. You need something much more specific

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;
}

or simply

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

CodePudding user response:

You are doing a "swap index location in list" operation when you are using "Swap".

You are asking to simply swap values in the priority list.

Simply write:

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

And call this, with your two customers.

  • Related