Notez que ceci est ma meilleure tentative d'interpréter le sens de la question. S'il vous plaît répondez si je suis loin de base :) J'ai proposé une solution en utilisant une requête SQL unique pour mettre à jour la sortie, car c'est probablement un peu trop complexe pour une solution LINQ.
Voici une requête qui va générer une table d'ID et de noms où le nom est ajouté avec une valeur d'index chaque fois que l'ID et le nom sont identiques. Cela fonctionne en générant un numéro de ligne et en comptant les valeurs qui sont identiques. Si le nombre de valeurs identiques est supérieur à 1, le numéro de ligne est utilisé pour générer un index ajouté au nom. Notez que cela NE PEUT PAS modifier la table existante, car il est impossible de mettre à jour les enregistrements de cette manière lorsqu'il n'y a pas d'identifiant unique. Vous auriez à la sortie cela en une nouvelle table et utiliser à la place:
;with T as (
select
row_number() over (order by id, name) as idx,
id,
name,
(select count(*) from [tbl1] b where b.id=a.id and b.name=a.name) as count
from
[tbl1] a
)
select
id,
case when
count > 1 then
name +
cast(
(select count(*) from T b where b.id=T.id and b.name=T.name
and b.idx<T.idx) + 1
as varchar(50))
else
name
end
from
T
Avec cette requête, si tbl1 contenait l'entrée suivante:
1 a
1 a
1 a
1 b
2 a
2 a
2 b
2 b
2 b
2 c
2 c
2 d
1 e
La sortie suivante sera générée:
1 a1
1 a2
1 a3
1 b
1 e
2 a1
2 a2
2 b1
2 b2
2 b3
2 c1
2 c2
2 d
S'il vous plaît laissez-moi savoir si cela n'a pas répondu à votre question. J'espère que cela t'aides!
En l'état, ce n'est pas une vraie question. Qu'avez-vous essayé? – JNK