Похоже, вы хотите создать динамический тип, который расширяет существующий тип и внедряет пользовательские свойства. Я почти уверен, что это невозможно в одном операторе LINQ (вам понадобится либо динамика C # 4.0, либо какое-то безумие отражения).
Однако вы можете создавать анонимные классы с любыми понравившимися вам свойствами:
var sons = parents.Select(p =>new { parentProperty1=p.Prop1, attachedProperty1=..., tachedProperty2=...});
Или:
var sons = parents.Select(p =>new { parent=p, attachedProperty1=..., tachedProperty2=...});
В качестве альтернативы, почему у вас нет свойства «дополнительные свойства» (тип объекта или словарь) в вашем ParentClass, чтобы вы могли сделать это:
var sons = parents.ForEach(p => p.AdditionalProps = new { attachedProperty1=..., tachedProperty2=...});
Вы могли бы написать метод расширения, который использовал отражение, чтобы захватить все общедоступные свойства данного объекта, объединить их с данным анонимным объектом (вашим "присоединенным объектом и т. Д. Объектом") и вернуть новый анонимный объект со всеми объединенными свойствами. Однако это было бы плохим решением - возможно, лучшим решением было бы возвращение Dictionary вместо анонимного типа, потому что даже если вы создали объединенный анонимный тип, вы не сможете получить доступ к его свойствам в типобезопасный способ.