J'ai la déclaration LINQ suivante:Problème avec DBNull lors de l'utilisation LINQ à DataSet
Dim PSNum As Integer = 66
Dim InvSeq = (From invRecord In InvSeqDataSet.RptInvSeqDT.AsQueryable() _
Where IIf(invRecord.IsPack_NumNull(), False, invRecord.Pack_Num = PSNum) _
Select New With _
{.Inv = invRecord.Invoice_Num, .Seq = invRecord.Inv_Seq}).FirstOrDefault()
invRecord.Pack_Num est un champ de type entier. Cela signifie que lorsque j'essaie d'y accéder, si c'est DBNull, j'obtiens une exception StronglyTypedException. Le code ci-dessus renvoie cette exception. Si, cependant, je supprime le "invRecord.Pack_Num = PSNum" et à sa place mettre quelque chose comme "True", le code fonctionne bien.
Donc, je suppose que ma question est, pourquoi est-ce que invRecord.IsPack_NumNull() renvoie False lorsque la valeur est en fait DBNull et que puis-je utiliser comme conditionnel à la place? Je me suis cogné la tête contre le mur pendant un moment et je ne trouve pas de solution à ce problème.
Ouais, vous aviez raison. Je ne sais pas comment j'ai raté ça, mais je pensais que c'était l'inverse. Intuitivement, j'ai toujours pensé que IIf signifiait quelque chose comme «Si et seulement si», ce qui impliquerait ce comportement de «court-circuit» que je voulais. Quoi qu'il en soit, merci beaucoup. – Overhed
Je suppose que l'équipe de langue VB voulait dire "inline if". –