Try
var d = lst1.Where(q => q <= DateTime.Now).DefaultIfEmpty().Max();
Your result will now contain DateTime.MinValue
if there are no matches
Try
var d = lst1.Where(q => q <= DateTime.Now).DefaultIfEmpty().Max();
Your result will now contain DateTime.MinValue
if there are no matches