Вчера я задал очень похожий вопрос , но только сегодня я понял, что принятый мной ответ не решает все мои проблемы. У меня есть следующий код:
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 });