Как я могу создать динамический выбор с несколькими свойствами для IEnumerable во время выполнения?

Вчера я задал очень похожий вопрос , но только сегодня я понял, что принятый мной ответ не решает все мои проблемы. У меня есть следующий код:

public Expression> SelectExpression(string fieldName)
{
    var param = Expression.Parameter(typeof(TItem), "item");
    var field = Expression.Property(param, fieldName);
    return Expression.Lambda>(field, 
        new ParameterExpression[] { param });
}

, который используется следующим образом:

string primaryKey = _map.GetPrimaryKeys(typeof(TOriginator)).Single();
var primaryKeyExpression = SelectExpression(primaryKey);
var primaryKeyResults = query.Select(primaryKeyExpression).ToList();

Это позволяет мне извлечь первичные ключи из IQueryable . Проблема в том, что этот код работает только с одним первичным ключом, и мне нужно добавить поддержку нескольких PK.

Итак, есть ли способ адаптировать метод SelectExpression выше, чтобы взять IEnumerable (это мой список имен свойств первичного ключа) и получить метод вернуть выражение, которое выбирает эти ключи?

Т.е. Учитывая следующее:

var knownRuntimePrimaryKeys = new string[] { "CustomerId", "OrderId" }`

My Select необходимо сделать следующее (во время выполнения):

var primaryKeys = query.Select(x=> new { x.CustomerId, x.OrderId });

6
задан Community 23 May 2017 в 11:58
поделиться