C# 将反射属性链接到变量

C# 将反射属性链接到变量,c#,linq,reflection,C#,Linq,Reflection,是否可以将反射属性链接到变量?只是为了更好的代码 var xxx = results.Where(r => r.GetType().GetProperty(levelName).GetValue(r, null) == node.Name) 有可能转换成那样的东西吗 var myReflectedProp = r.GetType().GetProperty(levelName).GetValue(r, null); var myReflectedProp2 = r.GetType().G

是否可以将反射属性链接到变量?只是为了更好的代码

var xxx = results.Where(r => r.GetType().GetProperty(levelName).GetValue(r, null) == node.Name)
有可能转换成那样的东西吗

var myReflectedProp = r.GetType().GetProperty(levelName).GetValue(r, null);
var myReflectedProp2 = r.GetType().GetProperty(levelName2).GetValue(r, null);
var xxx = results.Where(r => myReflectedProp && r => myReflectedProp2)

干杯

是的,只要手动创建表达式树就可以了

var myReflectedPropParameter = Expression.Parameter(typeof(YourType));
var myReflectedProp = Expression.Lambda<Func<YourType, bool>>
    (Expression.MakeMemberAccess(myReflectedPropParameter, typeof(YourType).GetProperty(levelName)), myReflectedPropParameter);
var xxx = results.Where(myReflectedProp);
var myReflectedPropParameter=Expression.Parameter(typeof(YourType));
var myReflectedProp=Expression.Lambda
(Expression.MakeMemberAccess(myReflectedPropParameter,typeof(YourType).GetProperty(levelName)),myReflectedPropParameter);
var xxx=结果,其中(myReflectedProp);

当然,您需要将using语句添加到
System.Linq.Expressions

不清楚您想做什么。你能解释一下吗?我只是想让代码更具可读性。实际上,我的LINQ Where太长了,很难理解。错误2:'System.LINQ.Expressions.Expression'a'System.Func'。显然我用myType改变了YourType:)@Kaiser69是的,YourType只是一个占位符。代码也没有经过测试,但是应该可以工作。您得到的错误消息是什么?var xxx=results.Where(myReflectedProp)。获取上面的错误。啊,我认为
结果
是一个IQueryable,例如用于数据库查询。但它似乎只是一个IEnumerable。在这种情况下,您可以使用它创建一个对象查询,例如使用
results.AsQueryable()。Where(myReflectedProp)
这是因为字符串不能转换为bool,因此不能像
那样使用。Where(r=>r.filename)
。相反,您需要创建一个二进制表达式,其中左手是成员访问,右手是
expression.Constant(yourFilename)