Récupérer une liste contenant NULLS avec Linq
Question
Est-il possible d'utiliser LINQ pour récupérer une liste qui peut contenir des valeurs NULL.
Par exemple, si j'ai une jointure externe gauche comme ceci:
var query= from c in db.Customers
join o in db.Orders
on c.CustomerID equals o.CustomerID into sr
from x in sr.DefaultIfEmpty()
select x.OrderId;
Comment puis-je obtenir une liste qui pourrait ressembler à {12,13, null, 14, null, 11,16,17}?
Cela ne fonctionne pas pour moi:
query.ToList<decimal?>();
Est-il possible?
La solution
est correct en monnaies locales, mais il est un peu plus propre à simplement jeter votre sélection à un type Nullable pur et simple.
var query= from c in db.Customers
join o in db.Orders
on c.CustomerID equals o.CustomerID into sr
from x in sr.DefaultIfEmpty()
select (decimal?)x.OrderId;
Autres conseils
Le problème est x.OrderId
va jeter un NullReferenceException
quand x
est nulle. Vous devez vérifier null first , puis retourner la propriété s'il y a un objet. Par exemple
select x == null ? (decimal?)null : x.OrderId;
OrderId
ne pas tout à fait sonner comme il devrait être un nombre décimal mais ...
Essayez:
var query = from c in db.Customers join o in db.Orders on c.CustomerID equals o.CustomerID into sr select (sr != null : sr.OrderId : null);