作业帮 > 综合 > 作业

c# 表达式树如下实现 .Where(p=>p.id==2)表达式 :p=>p.id==2如何动态生成,也就是属性id是

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/16 06:27:47
c# 表达式树
如下实现 .Where(p=>p.id==2)
表达式 :p=>p.id==2如何动态生成,也就是属性id是已知字符串?
如下可以得到LambdaExpression,但是怎么转成Expression呢?
ParameterExpression param = Expression.Parameter(typeof(T),"c");
Expression left = Expression.Property(param,typeof(T).GetProperty("id"));
Expression right = Expression.Constant(1);
Expression filter = Expression.Equal(left,right);
LambdaExpression pred = Expression.Lambda(filter,param);
c# 表达式树如下实现 .Where(p=>p.id==2)表达式 :p=>p.id==2如何动态生成,也就是属性id是
delegate(T)
{
return T.id==2;
}
再问: 这样会提示T没有id属性
再答: T 是一个泛型 你给的泛型 没有ID属性的话 传进去肯定没有ID了啊。。 向你写的lambda .Where(p=>p.id==2) p必须是已经实例化并且有ID的一个类
再问: 谢谢,其实这是一个父类的方法 class Base { .Where(p=>p.id==2) } 确定的是继承这个类的传入的T,肯定是都有id属性的 为了减少代码量,所以想写到父类中 希望能通过像这种GetProperty("id")); 的方式保证编译通过
再答: 不客气