2009-01-13 5 views
1

J'ai une nouvelle instance d'un objet dans un Linq DBML, mais je ne connais pas le test si le champ date est vide.Linq to SQL: Demander si une date est vide

J'ai essayé:

If d Is Nothing OrElse IsDBNull(d) OrElse d <= Date.MinValue Then 
    TextValue = "nada" 
Else 
    TextValue = FormatDateTime(d) 
End If 

Mais le résultat est "12:00:00 am"

modifier: Modification nom de la variable la d
modifier: S'il vous plaît noter que le champ SQL est annulable

edit II: Désolé les gars, l'erreur était dans une autre partie du code. La comparaison à rien est la solution

Répondre

3

Le code que vous voulez est (je l'espère) ..

If MyNullableDateObject.HasValue Then 
    TextValue = FormatDateTime(MyNullableDateObject.Value) 
Else 
    TextValue = "nada" 
End If 

Si le champ SQL accepte les valeurs NULL alors le concepteur LINQ to SQL mappe à un type .net Nullable, pour instance SQL DateTime sera mappé au type appelé Date ?. Si vous regardez les propriétés du champ dans le concepteur Linq to SQL, il doit avoir une propriété "Nullable" qui, si le schéma SQL autorise les valeurs NULL dans ce champ, sera définie sur true.

Les types de date non nulles (c'est-à-dire ordinaires) sont des types de valeur et non des types d'objet, donc "Is Nothing" n'aide pas. IsDBNull est pour les types sous System.Data.SqlTypes, mais Linq to SQL correspond aux types .Net "natifs", ce qui n'aide pas non plus.

Voir - Nulllable Types


EDIT

Vous pourriez envisager de renommer la variable valeur à quelque chose d'autre, (comme je l'ai fait ci-dessus) depuis bien sûr, ce n'est pas un type de valeur, la valeur est un mauvais nom.

Notez également que dans le type VB Nullable peut être déclarée de deux manières équivalentes

Dim d As Date? 
Dim d As Nullable(Of Date) 

Hope this sens.

+0

Son réellement value.value. Je songerais aussi à renommer 'value'; p – Shawn

+0

Oui, c'est une bonne idée. La valeur n'est pas une valeur; exactement! –

+0

Ajout de HasValue jeter un "membre public 'HasValue' sur le type 'String' non trouvé" exception. Ensuite, je pense que String.IsNUllOrEmpty (d) va le détecter, mais non. –

0

Je ne sais pas si cela va fonctionner, mais vous voulez probablement comparer avec Vide (ou faire un appel à IsEmpty) comme 12:00 am n'est pas une valeur nulle.