Reputation: 587
Let's say I have the following piece of code:
string SomeConst = "OtherName";
var persons = GetPersons(); //returns list of Person
var q = persons.Select(p =>
new
{
SomeConst = p.Name
});
Basically I'd expect to have in q sequence of anonymous type with the property named OtherName and not SomeConst. How can I achieve such a behaviour?
Upvotes: 39
Views: 32908
Reputation: 710
The only way I'm aware of you can dynamically add properties whose name is unknown at compile time is the ExpandoObject :
var q = persons.Select(p => { dynamic obj = new ExpandoObject(); obj.Name = p.Name; return obj; });
But I really don't see any interest in doing such a thing. It is most probably a very bad design/idea to do so. You will undoubtly create more awkward, unreadable and unmaintenable code than you will solve anything...
Upvotes: 0
Reputation: 292425
You can't do that. The names of the properties of an anonymous type must be known at compile time. Why exactly do you need to do that?
You could achieve a similar effect by creating a sequence of dictionaries instead of anonymous objects:
string SomeConst = "OtherName";
var persons = GetPersons(); //returns list of Person
var q = persons.Select(p =>
new Dictionary<string, string>
{
{ SomeConst, p.Name }
});
Upvotes: 35