Bonjour,

Dans une base de données dont certaines infos ne sont pas cohérentes, je dois trouver les incohérences pour les signaler.

Soit 3 tables dont 2 sont correctes et une 3ème qui y réfère et dont les infos ne sont pas toujours cohérentes avec les infos contenues dans 2 premières : scdt_cad, scdt_designation et anc_lots.

scdt_cad contient entre autre code_cad
scdt_designation contient entre autre id_designation et code_designation
Chaque scdt_cad contient une ou plusieurs scdt_designation (via une table intermédiaire contenant code_cad et id_designation)
Ces infos sont correctes.
Les données en sont extraites via Entity Framework et var cad me donne les scdt_cad avec les scdt_designation qui leurs correspondent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
                    var cads = ctr.scdt_cad
                                       .Include("scdt_designation")
                                       .ToList();
anc_lots contient entre autre code_cad et code_ds.
L
e code_cad devrait exister dans scdt_cad et le code_ds devrait être un code_designation qui est valide pour ce code_cad.
Et c'est ici que ça coince et que ce n'est pas cohérent (parce qu'aucune liaison n'a été faite avec anc_lot n'a été faite dans la BDD).
Certains anc_lots ont un code_cad qui n'existe pas ou ont un code_cad qui existe mais dont le code_ds n'existe pas pour ce code_cad.


Exemple :
Paires code_cad/code_designation
L'objet scdt_cad dont le code est 20210 contient des objets scdt_designation dont les codes sont A, R01, R02, R03
L'objet scdt_cad dont le code est 20220 contient des objets scdt_designation dont les codes sont A, R01
L'objet scdt_cad dont le code est 20230 contient des objets scdt_designation dont les codes sont R01, R03

anc_lots :
code_cad = 20210 et code_ds = A =>OK
code_cad = 202110 et code_ds = A => PAS OK : le code_cad 202110 n'existe pas => anc_lot doit sortir dans la requête
code_cad = 20220 et code_ds = A =>OK
code_cad = 20220 et code_ds = R03 PAS OK : le code_cad 20220 existe mais le code_ds R03 n'existe pas dans 20220 => anc_lot doit sortir dans la requête
code_cad = 20230 et code_ds = R01 =>OK
code_cad = 20230 et code_ds = R03 =>OK[/QUOTE]

Je cherche donc à sortir tous les anc_lot dont le code_cad n'existe pas dans scdt_cad ou, si le code_cad existe, dont le code_ds n'existe pas dans le code_cad.
Pour cela j'ai essayé plusieurs choses mais ce qui me semblait cohérent ne l'est visiblement pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
                    var des_sec_erronee = ctr.anc_lots 
                                              .Where(al => !cads.Any(c => c.code_cad == al.code_cad)
                                                        || cads.Any(c => c.code_cad == al.code_cad && !c.scdt_designation.Any(ds => ds.code_designation == al.code_ds))).ToList();
Je reçois l'erreur : System.NotSupportedException : 'Unable to create a constant value of type 'Appli.scdt_cad'. Only primitive types or enumeration types are supported in this context.'

Comment dois-je faire pour résoudre ce problème ?

Merci de votre aide, mais surtout de vos explications.