Bonjour à tous,
J'utilise actuellement Linq To Entities, hors je rencontre un problème avec une relation 0..1
Si il y a une valeur (donc 1), tout fonctionne, par contre dans le cas où j'ai null en bdd, alors ça plante à cause de l'objet qui n'existe pas dans le where.

Tout d'abord, voici ma solution:
Pièce jointe 76778

Ma récupération Linq To Entities:
Code c# : 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
 
public class RequeteManager : Manager
    {
        public List<RequeteEntity> GetAll()
        {
            return Context.requete
                .Include("provenance")
                .ToList()
                .Select(a=>new RequeteEntity()
                               {
                                   Id = a.id_requete,
                                   Demande = a.demande,
                                   Provenance = Context.provenance
                                                    .Where(pr => pr.id_provenance == a.provenance.id_provenance)
                                                    .Select(pr => new ProvenanceEntity()
                                                                      {
                                                                          Id = pr.id_provenance,
                                                                          Nom = pr.nom
                                                                      })
                                                    .FirstOrDefault(),
 
                                    Priorite = Context.priorite
                                                    .Where(prio => prio.id_priorite == a.priorite.id_priorite)
                                                    .Select(prio => new PrioriteEntity(){
                                                            Id = prio.id_priorite,
                                                            Nom = prio.nom
                                                        })
                                                    .FirstOrDefault()
                               })
                .ToList();
        }
    }

Ce qui coince c'est cette partie:
.Where(prio => prio.id_priorite == a.priorite.id_priorite)
Si il n'y a pas de priorité associée à une requête, la valeur du champs est "null" et j'ai donc le message suivant :
Exception:Caught: Object reference not set to an instance of an object. (System.NullReferenceException)
(C'est normal).

Je me suis donc dit, je vais testé si la valeur est null:
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Priorite = Context.priorite
                                                    .Where(prio => a.priorite!=null)
                                                    .Where(prio => prio.id_priorite == a.priorite.id_priorite)
                                                    .Select(prio => new PrioriteEntity(){
                                                            Id = prio.id_priorite,
                                                            Nom = prio.nom
                                                        })
                                                    .FirstOrDefault()
]
Et là:
Exception:Thrown: Unable to create a constant value of type 'Closure type'. Only primitive types ('such as Int32, String, and Guid') are supported in this context. (System.NotSupportedException)
J'ai essayé : .Where(prio => prio.id_priorite == ((a.priorite==null)?2:a.priorite.id_priorite))

Bref, je n'ai rien trouvé de concluant sur Google et je ne m'en sort pas.
Comment puis je faire sans avoir à récupérer toutes mes demandes, puis faire un foreach derrière. J'aimerai tout faire dans la même requête.

Comment puis je faire svp? des pistes?