如何创建比较子对象中的属性的表达式树

本文关键字:对象 属性 表达式 比较 何创建 创建 | 更新日期: 2023-09-27 18:31:11

如何

创建比较子对象中属性的表达式树?

例如,我已经可以创建一个 lambda 表达式树来比较对象的直接属性。喜欢这个:

var propertyName = "JobNumber";
var propertyValue = "1005";
Type entityType = typeof(ParentObject);
OperatorDelegate comparisonMethod = Expression.Equal;
var parameter = Expression.Parameter(entityType, "entity");
var lambda =
    Expression.Lambda<Func<ParentObject, bool>>(
        comparisonMethod(Expression.Property(parameter, propertyName), Expression.Constant(propertyValue)),
        parameter);

这(我相信)相当于:

entity => entity.JobNumber == "1005";

我挂断电话的地方是试图弄清楚如何比较子对象属性中的值。例如,给定:

public class ParentObject
{
    public ChildObject Child { get; set; }
    // more properties of ParentObject
}
public class ChildObject
{
    public string JobNumber { get; set; }
}

我将如何构建一个等效于以下内容的表达式:

parentEntity => parentEntity.Child.JobNumber == "1005"

感谢您的任何帮助。

如何创建比较子对象中的属性的表达式树

你只需要获取返回的属性值的属性:

var child = Expression.Property(parameter, "Child");
var jobNumber = Expression.Property(child, propertyName);
var lambda =
    Expression.Lambda<Func<ParentObject, bool>>(
        comparisonMethod(jobNumber, Expression.Constant(propertyValue)),
        parameter);