user759141
user759141

Reputation: 587

Setting anonymous type property name

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

Answers (2)

Ssithra
Ssithra

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

Thomas Levesque
Thomas Levesque

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

Related Questions