dynamic property name

2020-04-08 12:48发布

问题:

I'm trying to write a linq query that takes a dynamic property name. So for example, if the property name is 'test', a simple query would look like this:

var test = testList.Select(x => x.test).Distinct().ToList();

But I want to dynamically generate the property name, eg:

var propertyName = "test";

var test = testList.Select(x => x.propertyName).Distinct().ToList();

I get an error because 'propertyName' isn't an actual property.

What would be the best way to achieve this?

回答1:

You'd have to use reflection to do what you're trying to do:

var test = testList
               .Select(x => x.GetType().GetProperty(propertyName).GetValue(x))
               .Distinct()
               .ToList();


标签: c# linq lambda