Field<>
предназначен для LINQ to DataTables и включен в качестве расширения System.Data. Это не стандартный метод расширения LINQ. См. Этот вопрос о том, как использовать LINQ to DataTables .
То, что вы пытаетесь сделать, можно выполнить с помощью выражения или Dynamic LINQ . Динамический LINQ не является частью того, что поставляется с .NET; он был включен в качестве примера в VS2008, и люди продолжают использовать его. Я не уверен, что это поддерживается, обновляется и т. Д. Microsoft. Я бы на это не рассчитывал, пока он не войдет в рамки.
Вы можете создать метод для создания selector
, упомянутого в ответе Джона, следующим образом:
public Expression<Func<Keys,T>> GetSelectLambda<T>(string propertyName)
{
ParameterExpression lhsParam = Expression.Parameter(typeof(Keys), "s");
Expression fieldParam = Expression.Property(lhsParam, propertyName);
var theExpression = Expression.Lambda<Func<Keys, T>>(fieldParam, lhsParam);
return theExpression;
}
Таким образом, передача GetSelectLambda<string>("DBKey")
должна генерировать лямбду s => s.DBKey
, которая затем возвращается и передается методу Джона.
Надеюсь, это поможет.