Comme vous l'avez dit, le type de données de u.LastLogon est DateTime? . Cela signifie qu'il peut ou non avoir une valeur. En diffusant vers DateTime , vous exigez qu'il ait une valeur. Dans ce cas, ce n'est pas le cas.
Selon ce que vous essayez d'en faire, vous voudrez peut-être vérifier le HasValue propriété :
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.ToShortDateString() : DBNull.Value;
Si votre base de données LastLogon colonne est de type DateTime, alors vous devriez pouvoir faire :
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.Value : DBNull.Value;