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 :(C'est normal).Exception:Caught: Object reference not set to an instance of an object. (System.NullReferenceException)
Je me suis donc dit, je vais testé si la valeur est null:
Et là:
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() ]
J'ai essayé : .Where(prio => prio.id_priorite == ((a.priorite==null)?2:a.priorite.id_priorite))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)
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?
Partager