为子 属性 创建 MethodCallExpression
Create a MethodCallExpression for a sub property
有一个简化场景的工作示例:
//find all tasks with History item with id equals 117992
var exprString = "Id = 117992";
var innerLambda = DynamicExpressionParser.ParseLambda(typeof(History), typeof(bool), exprString);
var resultCallExpression = Expression.Call(
typeof(Enumerable), nameof(Enumerable.Any), new[] { typeof(History) },
Expression.Property(givenTaskExpression, "Histories"), innerLambda
);
但是我无法修改该示例以根据低于一级的 属性 提供过滤器表达式。
请查看给定的图表。我有一个类型为“任务”的给定表达式 (givenTaskExpression),现在我想生成一个结果表达式,它在芯片列表中使用过滤器 lambda。
例如给我所有的任务,其中有一个带有 Id = '1234'
的芯片
类似的东西:
var exprString = "Id = '1234'";
var innerLambda = DynamicExpressionParser.ParseLambda(typeof(Chip), typeof(bool), exprString);
var chipsProp = Expression.Property(
Expression.Property(givenTaskExpression, nameof(Task.Case)),
nameof(Case.Chips));
var resultCallExpression = Expression.Call(
typeof(Enumerable), nameof(Enumerable.Any), new[] { typeof(Chip) }
chipsProp, innerLambda
);
有一个简化场景的工作示例:
//find all tasks with History item with id equals 117992
var exprString = "Id = 117992";
var innerLambda = DynamicExpressionParser.ParseLambda(typeof(History), typeof(bool), exprString);
var resultCallExpression = Expression.Call(
typeof(Enumerable), nameof(Enumerable.Any), new[] { typeof(History) },
Expression.Property(givenTaskExpression, "Histories"), innerLambda
);
但是我无法修改该示例以根据低于一级的 属性 提供过滤器表达式。
请查看给定的图表。我有一个类型为“任务”的给定表达式 (givenTaskExpression),现在我想生成一个结果表达式,它在芯片列表中使用过滤器 lambda。
例如给我所有的任务,其中有一个带有 Id = '1234'
的芯片类似的东西:
var exprString = "Id = '1234'";
var innerLambda = DynamicExpressionParser.ParseLambda(typeof(Chip), typeof(bool), exprString);
var chipsProp = Expression.Property(
Expression.Property(givenTaskExpression, nameof(Task.Case)),
nameof(Case.Chips));
var resultCallExpression = Expression.Call(
typeof(Enumerable), nameof(Enumerable.Any), new[] { typeof(Chip) }
chipsProp, innerLambda
);