Salut a tous,

tout est dans le titre. J'ai de tres serieux problemes de logique, ca veut pas rentrer dans ma tete, et si ca rentre c'est par par coeurisme a force de refaire 10 fois le meme exercice.
La pour le boulot j'ai un algorithme a faire et je suis coincé. en gros voici le probleme:

J'ai une table contratComponent avec une colonne ordre (int). j'ai plusieurs contrats avec leurs numeros d'ordre. je dois pouvoir modifier l'ordre.

ex. liste de 5 components.
components = [
{id: "comp1", order: 1},
{id: "comp2", order: 2},
{id: "comp3", order: 3},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];
le component a changer est comp2 qui avait order = 2 et maintenant son newOrder = 3

{id: "comp2", order: 2} > {id: "comp2", order: 3}
1) liste triee avec comp2 enlevé:

components = [
{id: "comp1", order: 1},
{id: "comp3", order: 3},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];


2) je decremente les ordres qui viennent apres comp2

components = [
{id: "comp1", order: 1},
{id: "comp3", order: 2},
{id: "comp4", order: 3}.
{id: "comp5", order: 4}
];


3) dans la liste il y avait deja un order = 3

{id: "comp3", order: 3} (qui est devenu {id: "comp3", order: 2})

4) donc j'incremente les order suivants

components = [
{id: "comp1", order: 1},
{id: "comp3", order: 2},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];

5) je reinsere le component comp2 avec le newOrder:

components = [
{id: "comp1", order: 1},
{id: "comp3", order: 2},
{id: "comp2", order: 3},
{id: "comp4", order: 4}.
{id: "comp5", order: 5}
];


moi j'ai fait ca:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public void SetOrder(ref Contract contract, Guid contractComponentId, int newOrder)
{
    ContractComponent? componentToMove = contract.ContractComponents
        .FirstOrDefault(c => c.Id == contractComponentId);
 
    List<ContractComponent> componentsListWithoutComponentToMove = contract.ContractComponents
        .Where(c => c.Id != contractComponentId)
        .OrderBy(c => c.Order)
        .ToList();
 
    if (componentToMove == null) return;
 
    int oldOrder = componentToMove.Order;
    //if (oldOrder == newOrder) return;
 
    if (newOrder > oldOrder)
    {
        foreach (var component in componentsListWithoutComponentToMove
            .Where(c => c.Order > oldOrder && c.Order <= newOrder))
        {
            component.Order -= 1;
        }
    }
    else
    {
        foreach (var component in componentsListWithoutComponentToMove
            .Where(c => c.Order >= newOrder && c.Order < oldOrder))
        {
            component.Order += 1;
        }
    }
 
    componentToMove.Order = newOrder;
 
    componentsListWithoutComponentToMove.Add(componentToMove);
 
    componentsListWithoutComponentToMove = componentsListWithoutComponentToMove
        .OrderBy(c => c.Order)
        .ToList();
 
    contract.ContractComponents = componentsListWithoutComponentToMove;
 
}
sauf que des l'entree de ma methode le contractComponent que je veux modifer a deja le newOrder et donc l'algo ne marche pas. Vous avez une idee de comment faire? Je suis desespere