Bezpieczne dereferencjonowanie wywołania FirstOrDefault w Linq c #

Dla uproszczenia w moim kodzie chciałbym móc wykonać następujące czynności: mając kolekcję, znajdź pierwszy element pasujący do wyrażenia lambda; jeśli istnieje, zwróć wartość nieruchomości lub funkcji. Jeśli nie istnieje, zwróć wartość null.

Zaktualizowane przykłady w. klasy

Zbierzmy kolekcję rzeczy

class Stuff
{
    public int Id { get; set; }
    public string Value { get; set; }
    public DateTime? ExecutionTime { get; set; }
}

To, do czego dążę, to sposób, aby wracać ładnie, dzwoniąc do tego

var list = new Stuff[] { new Stuff() { Id = 1, Value = "label", ExecutionTime = DateTime.Now } };

// would return the value of ExecutionTime for the element in the list
var ExistingTime = list.FirstOrDefault(s => s.Value.Contains("ab")).ExecutionTime;

// would return null
var NotExistingTime = list.FirstOrDefault(s => s.Value.Contains("zzz")).ExecutionTime; 

Czy jest to możliwe w przypadku niektórych składni linq-fu lub czy muszę sprawdzić wyraźnie wartość zwracaną przed kontynuowaniem?

Oryginalny przykład w. smyczki

var stuff = {"I", "am", "many", "strings", "obviously"};

// would return "OBVIOUSLY"
var UpperValueOfAString = stuff.FirstOrDefault(s => s.contains("bvi")).ToUpper();

// would return null
var UpperValueOfAStringWannabe = stuff.FirstOrDefault(s => s.contains("unknown token")).ToUpper();

Komentarz: Nie powinienem używać łańcuchów w moim oryginalnym przykładzie, ponieważ nieznacznie wypacza pytanie, koncentrując je na metodzie ToUpper i klasie string. Proszę wziąć pod uwagę zaktualizowany przykład

questionAnswers(3)

yourAnswerToTheQuestion