То, что у вас есть, почти правильно. Мне пришлось угадывать перечисления и членов, так как вы не предоставляете другие классы:
var result = from name in names
select new Person()
{
First = name.Type == PersonType.Fracais ? name.PreNom : name.First,
Last = name.Last
};
В запросе linq может содержаться практически любое выражение, включая вызовы функций, поэтому тестирование значений и их изменение на лету вполне приемлемо.