gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:01:21 26 4
gpt4 key购买 nike

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

例如,我已经可以创建一个 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);

关于c# - 如何创建比较子对象中属性的表达式树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18795798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com