linq sur nullable datetime
J'ai une table qui a Time1 et Time2 (pour exemple). Time2 permet pour les valeurs null.
J'ai un modèle d'objet et je veux avoir Time2 que les valeurs null; pour l'instant j'ai ceci:
public Class MyModel{
public DateTime Time1 {get;set;}
public System.Nullable<DateTime> Time2 {get;set}
}
Quand je vais à ma requête, j'ai ceci:
var MyQuery = ...
select new MyModel()
{
Time2 = (a.Time2)
et ici, je me demandais si je devrais avoir le SingleOrDefault opérateur? Elle n'est pas diffusée dans l'intellisense. Howver, l'intellisense montre plusieurs autres options, parmi qui sont: HasValue, la Valeur, la GetValueOrDefault.
Toutes les idées sur ce qui est le droit de choisir?
Grâce
- Vous pouvez utiliser DateTime? au lieu de Système.Nullable<DateTime>.
- Êtes-vous sûr que vous avez compris le Système.Linq? Si oui, merci de poster votre requête.
- Vous pouvez utiliser DateTime? au lieu du Système.Nullable<DateTime>. C'est ok comme vous l'écrivez, si un.Time2 est un DateTime ou DateTime?.
- Dois-je simplement remplacer le Système public.Nullable<DateTime> avec DateTime? dans mon modèle d'objet de définition?
Vous devez vous connecter pour publier un commentaire.
C'est parce que Time2 est un type nullable. Les types nullables ont toujours une valeur de propriété. Si vous réviser votre ligne:
puis appuyez sur la période symbole de après avoir de la Valeur, vous verrez l'Intellisense pop-up.
Comme un contrôle de sécurité, vous pouvez également vérifier que la valeur de un.Time2 n'est pas null, avant de l'utiliser .De la valeur. Sinon, vous obtiendrez une référence nulle exception
SingleOrDefault est une méthode d'extension pour le générique IEnumerable comme vous le voyez ci-dessous.
public static TSource SingleOrDefault(
this IEnumerable source)
Si vous aviez une liste de Nullable vous pouvez utiliser cette méthode et il serait de retour à la première valeur ou déclenche si la liste n'en avaient pas ou plus d'un élément.
Ce n'est probablement pas ce que vous voulez, vous voulez un peu de valeur quand il est null, alors vous devez utiliser l'fusionnent opérateur de C# 3.0 ou l'une des surcharges de la GetValueOrDefault méthode de Nullable<> type.
Pourquoi pensez-vous que Vous devriez avoir une méthode qui existe pour les éléments d'une collection sur quelque chose qui est un
System.Nullable<DateTime>
.Vous n'aurez pas
SingleOrDefault()
sur ce.Time2 = (a.Time2.HasValue ? a.Time2.Value : null)
C'est la façon dont vous devez définir la valeur ou la valeur null.
Value
sur la une.Time2().Valeur?
ce qui, apparemment,