LINQ to problème Dataset DBNULL / exception de référence null
Question
J'ai la requête LINQ suivante qui aboutit toujours à une erreur lors de mon « Remarque » colonne dtblDetail est nulle, même si je test si elle est NULL.
var varActiveAndUsedElementsWithDetails =
from e in dtblElements
join d in dtblDetails on e.PK equals d.FK into set
from d in set.DefaultIfEmpty()
where (e.ElementActive == true)
select new
{
ElementPK = e.PK,
Remark = d.IsRemarkNull() ? null : d.Remark
};
Le message d'erreur était: « La valeur de la colonne « Remarque » dans « dtblDetails » table est DBNull. » Après avoir ajouté le test d.IsRemarkNull () une exception de référence null est levée.
Pouvez-vous me aider?
Je l'ai déjà vérifié les sites Web suivants mais n'a pas trouvé quelque chose d'utile autre que je dois tester DBNULL. Mais comme dit cela ne résout pas mon problème.
La solution
Le problème est que l'ensemble élément « d » était vide. Donc, appeler 'd.IsRemarkNull () a donné lieu à l'exception de référence null. Le code suivant a résolu le problème:
var varActiveAndUsedElementsWithDetails =
from e in dtblElements
join d in dtblDetails on e.PK equals d.FK into set
from d in set.DefaultIfEmpty()
where (e.ElementActive == true)
select new
{
ElementPK = e.PK,
Remark = d == null? null : (d.IsRemarkNull() ? null : d.Remark)
};
Autres conseils
Où est l'erreur vient? Est-il possible que c'est le d.IsRemarkNull () qui est à l'origine? Qu'est-ce que cette méthode ressemble?
Peut-être:
DBNull.Value.Equals(d.Remark)
peut-être ce champ ne permet pas nul dans db, obtenir une valeur par défaut, et éviter la manipulation des valeurs nulles