【发布时间】:2017-03-22 14:23:25
【问题描述】:
在 lambda 表达式中获取项目的所有 PropertyInfo 的最佳方法是什么。
我想在 sql 数据库中的 xml 字段上设置过滤器。
var FilterBase = new FilterBase<SimpleItemSubObject>()
.SetSimpleFilter(x => x.ID, 123)
.SetSimpleFilter(x => x.Test.Name, "demo3");
在分析仪中,我可以获取 Name 属性的属性信息。
internal IEnumerable<PropertyInfo> GetExpressionList()
{
return GetPropertyListfor(lambda.Body as MemberExpression);
}
private IEnumerable<PropertyInfo> GetPropertyListfor(MemberExpression body)
{
var result = new List<PropertyInfo>();
if (body != null && body.Expression != null)
{
result.AddRange(GetPropertyListfor(body.Expression as MemberExpression));
result.Add((body as MemberExpression).Member as PropertyInfo);
}
return result;
}
如果它是一个字符串属性,这将返回属性信息。但是在 int 的情况下,分析器会失败,因为 lambda 添加了转换函数。
{x => Convert(x.ID)}
它增加了一个转换功能。
那么在这种情况下,对于 x.ID,获取 propertyinfo 的最佳方法是什么。以及如何防止使用转换功能
【问题讨论】:
标签: c# reflection lambda expression-trees