【发布时间】:2014-12-27 18:02:06
【问题描述】:
我正在尝试从字符串生成“属性选择器”。
让我用一个真实的例子来解释一下自己:
我们有一个带有 Name(字符串)属性的 Person 类。
我可以手动创建一个“属性选择器”,就像这样写的 propertySelector:
Expression<Func<Person, string>> propertySelector = x => x.Name;
但我想用我的方法获得相同的属性选择器。
var propertySelector = CreatePropertySelectorExpression<Person, string>("Name");
到目前为止,我所拥有的是:
public static Expression<Func<TIn, TOut>> CreatePropertySelectorExpression<TIn, TOut>(string path)
{
Expression exp = Expression.Parameter(typeof(TIn), "x");
foreach (var property in path.Split('.'))
{
exp = Expression.PropertyOrField(exp, property);
}
return exp;
}
但是...我遇到了无效的转换错误!
无法将类型“System.Linq.Expressions.Expression”隐式转换为 'System.Linq.Expressions.Expression>'。一个 存在显式转换(您是否缺少演员表?)
我对表达式很陌生,我不知道如何继续 :(
【问题讨论】:
-
能否添加一个真实的使用示例?
-
你的代码有一些错误,例如Expression.Parameter会返回ParameterExpression,Expression.PropertyOrField会返回MemberExpression,真的不明白你会实现什么
-
请检查我刚刚所做的编辑。我举了一个更好的例子。也许代码是错误的。我是关于表达式的新手:(提前谢谢!
标签: c# linq reflection lambda