Единственный способ, которым я знаю, что вы можете динамически добавлять свойства, имя которых неизвестно во время компиляции, - это ExpandoObject:
var q = persons.Select(p => { dynamic obj = new ExpandoObject(); obj.Name = p.Name; return obj; });
Но я действительно не вижу никакого интереса в подобных вещах.,Скорее всего, это очень плохой дизайн / идея сделать это.Вы, несомненно, создадите более неуклюжий, нечитаемый и не поддерживаемый код, чем что-либо решаете ...