просто чтобы добавить к комментарию Джона о том, что MaxBy становится грушевидным, если у вас нет foos, вы можете сделать OrderByDescending и затем использовать FirstOrDefault, чтобы получить элемент Max. Если коллекция пуста, она просто вернет null вместо "грушевидной формы" .
var foobars = bars.ToDictionary(bar => bar,
bar => bar.TheFoo.OrderByDescending(foo => foo.Value).FirstOrDefault());
Я не думаю, что это будет не так эффективно, как MaxBy, но оно будет более надежным в случае пустой коллекции.