我必须为 Entity Framework Linq 查询构建一个比较谓词。我正在使用反射,并且能够毫无问题地构建单级 Lambda 表达式。然而,我开始陷入困境的地方是我有一个有关系的实体
public class Parent {
public virtual Child child { get; set; }
.... Other Stuff...
}
public class Child {
public int property { get; set; }
public virtual Parent parent { get; set; }
.... Other Stuff.....
}
我怎样才能将“Child.property”传递给反射,以便能够创建一个 lambda 表达式进行比较,并得出一个类似于 item => item.Child.property == value 的 lambda 表达式?
最佳答案
我想你正在寻找这个:
ParameterExpression parameter = Expression.Parameter(typeof(Parent), "item");
Expression child = Expression.PropertyOrField(parameter, "child");
Expression childProperty = Expression.PropertyOrField(child, "property");
int value = 1;
Expression comparison = Expression.Equal(childProperty, Expression.Constant(value));
Expression<Func<Parent, bool>> lambda = Expression.Lambda<Func<Parent, bool>>(comparison, parameter);
var sample = new[] { new Parent() { child = new Child() { property = 1 } } };
var result = sample.Where(lambda.Compile());
关于linq - 使用反射比较通用/动态 linq 谓词中的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237382/