Ответ 1
// If you dont want to use a sub query, I would suggest:
var result = (
from f in foos
from s in f.MyStrings
select s).Distinct();
// Which is absoulutely equivalent to:
var theSameThing = foos.SelectMany(i => i.MyStrings).Distinct();
// pick the one you think is more readable.
Я также настоятельно рекомендую прочитать MSDN в методах расширения Enumerable. Это очень информативно и имеет отличные примеры!