Som du har sagt, datatypen u.LastLogon är DateTime? . Det betyder att det kan ha ett värde eller inte. Genom att casta till DateTime , du kräver att den har ett värde. I det här fallet gör det inte det.
Beroende på vad du försöker göra med det, kanske du vill kontrollera HasValue egenskap:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.ToShortDateString() : DBNull.Value;
Om din databas LastLogon kolumnen är av typen DateTime, då bör du kunna göra:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.Value : DBNull.Value;