Создать выражение селектора свойства для свойства POCO - PullRequest
0 голосов
/ 18 января 2019

У меня есть класс:

public class User 
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Теперь я хочу создать список:

List<Expression<Func<User, object>>> selectorExpressions = /* ... */

Этот список должен содержать выражения селектора для каждого свойства, соответствующего этому примеру. Lambdas:

user => user.Name;
user => user.Age;

/* etc... */

Какой самый простой способ добиться этого?

РЕДАКТИРОВАТЬ : Чтобы уточнить: я хочу создать этот список для каждого свойства в классе, например, как то так:

List<Expression<Func<User, object>>> selectorExpressions = Util.GetSelectorsForEveryProperty<User>();

Я не хочу вручную писать лямбда-выражения для каждого нужного мне свойства.

1 Ответ

0 голосов
/ 18 января 2019

Вы можете сделать это с помощью отражения и создания динамического выражения:

var selectorExpressions = new List<Expression<Func<User, object>>>();

foreach (var prop in typeof(User).GetProperties())
{
    var arg = Expression.Parameter(typeof(User), "x");
    var property = Expression.Property(arg, prop.Name);
    var cast = Expression.Convert(property, typeof(object));
    var expr = Expression.Lambda<Func<User, object>>(cast, arg);                
    selectorExpressions.Add(expr);
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...