У меня возникли проблемы с созданием генератора дерева выражений, который я построил.Expression Tree Expression.Call Синтаксис
В сущности, я хочу, чтобы преобразовать следующее дерево выражения:
var res = myObjInstance.AnalysisResponseMeasures
.First(p => p.MeasureTypeId == 1).MeasureValue
До сих пор я получил:
var propertyExp = Expression.Property(pe, "AnalysisResponseMeasures");
var someParam = Expression.Parameter(typeof(AnalysisResponseMeasure), "p");
var someParam2 = Expression.Parameter(typeof(AnalysisResponseMeasure), "p");
var childPropExp = Expression.Equal(
Expression.Property(someParam, "MeasureTypeId"),
Expression.Constant(1));
var firstExp = Expression.Call(
typeof(IEnumerable<AnalysisResponseMeasure>),
"First",
new[] { typeof(AnalysisResponseMeasure) },
propertyExp,
Expression.Lambda(childPropExp, someParam2));
var selectExp = Expression.Property(firstExp, "MeasureValue");
Но, я получаю сообщение об ошибке выполнения о том, что тип от IEnumerable<AnalysisResponseMeasure>
не имеет способа First
.
У меня явно были неправильные параметры, но я не могу понять, что случилось. Любая помощь будет оценена по достоинству.
Вы хотите вызвать статический метод [Enumerable.First] (https://msdn.microsoft.com/en-us/library/bb291976 (v = vs.100) .aspx) –
@JohanLarsson, спасибо. Тем не менее, я не пытаюсь называть этот статический метод. Я пытаюсь вызвать метод расширения Linq Сначала с лямбдой. –
Это метод, с которым я связан. –