Linq To Entities, problème quand la valeur dans le where est null!
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:
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 :
Citation:
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:
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à:
Citation:
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?