Я бы пошла лямбда ... еще лучше
var bars = Foos.Select(f => f.Bar).Distinct().ToArray();
работает так же, как и сообщение @lassevk.
Я бы также добавил, что вы можете отказаться от преобразования в массив до последней минуты.
LINQ выполняет некоторые оптимизации за кулисами, запросы остаются в форме запросов до тех пор, пока они не потребуются явно. Поэтому вы, возможно, захотите сначала включить в запрос все, что вам нужно, чтобы вся возможная оптимизация была применена в целом.
Под оценкой я имею в виду запрос чего-то, что явно требует оценки, например "Count ()" или "ToArray ()" и т. Д.