C# 从lambda表达式获取propertyinfo,但因int而失败

C# 从lambda表达式获取propertyinfo,但因int而失败,c#,reflection,lambda,expression-trees,C#,Reflection,Lambda,Expression Trees,获取lambda表达式中项的所有属性信息的最佳方法是什么 我想在sql数据库中的xml字段上设置一个过滤器 var FilterBase = new FilterBase<SimpleItemSubObject>() .SetSimpleFilter(x => x.ID, 123) .SetSimpleFilter(x => x.Test.Name, "demo3"); 它增加了一个转换函数

获取lambda表达式中项的所有属性信息的最佳方法是什么

我想在sql数据库中的xml字段上设置一个过滤器

var FilterBase = new FilterBase<SimpleItemSubObject>()
                    .SetSimpleFilter(x => x.ID, 123)
                    .SetSimpleFilter(x => x.Test.Name, "demo3");
它增加了一个转换函数

{x => Convert(x.ID)}

那么,在本例中,对于x.ID,获取propertyinfo的最佳方法是什么呢。如何防止使用convert函数编译器添加了convert表达式这一事实表明您正在使用非泛型lambda表达式和
对象
返回类型。大概是这样的:

public class FilterBase<T>
{
    public FilterBase<T> SetSimpleFilter(Expression<Func<T, object>> selector, object value)
    {
        // ...
        return this;
    }
}
因此将不再有
Convert

另一种方法是保持方法不变,并去除第一个
Convert
(如果有):

internal IEnumerable<PropertyInfo> GetExpressionList()
{
    var body = lambda.Body;
    if (body.NodeType == ExpressionType.Convert)
        body = ((UnaryExpression)body).Operand;
    return GetPropertyListfor(body as MemberExpression);
}
内部IEnumerable GetExpressionList()
{
var body=lambda.body;
if(body.NodeType==ExpressionType.Convert)
body=((一元表达式)body).操作数;
返回GetPropertyListfor(主体作为MemberExpression);
}

谢谢。谢谢你的回答。正如你所说,我剥夺了皈依者的权利。但是感谢您提供有关添加convert的原因的信息。
public FilterBase<T> SetSimpleFilter<V>(Expression<Func<T, V>> selector, V value)
internal IEnumerable<PropertyInfo> GetExpressionList()
{
    var body = lambda.Body;
    if (body.NodeType == ExpressionType.Convert)
        body = ((UnaryExpression)body).Operand;
    return GetPropertyListfor(body as MemberExpression);
}