Som du har sagt, datatypen u.LastLogon er DateTime? . Det betyder, at det kan have en værdi eller ikke. Ved at caste til DateTime , du kræver, at den har en værdi. I dette tilfælde gør det ikke.
Afhængigt af hvad du forsøger at gøre med det, kan du tjekke HasValue ejendom:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.ToShortDateString() : DBNull.Value;
Hvis din database LastLogon kolonnen er af typen DatoTid, så burde du kunne gøre:
userRow["LastLogon"] = u.LastLogin.HasValue ?
(object) u.LastLogin.Value : DBNull.Value;