C# Can';t构建lambda表达式树
尝试使用表达式树创建以下表达式(需要帮助) 并将对函数的所有引用更改为接收表达式,而不是二进制表达式。这一行有问题C# Can';t构建lambda表达式树,c#,.net,winforms,lambda,expression-trees,C#,.net,Winforms,Lambda,Expression Trees,尝试使用表达式树创建以下表达式(需要帮助) 并将对函数的所有引用更改为接收表达式,而不是二进制表达式。这一行有问题 var key = param.GetType().GetProperty("LabelName"); param.GetType()将返回没有LabelName属性的System.Linq.Expressions.ParameterExpression 您应该使用typeof(dt\u Label).GetProperty(“LabelName”)这一行有问题 var key
var key = param.GetType().GetProperty("LabelName");
param.GetType()
将返回没有LabelName
属性的System.Linq.Expressions.ParameterExpression
您应该使用typeof(dt\u Label).GetProperty(“LabelName”)
这一行有问题
var key = param.GetType().GetProperty("LabelName");
param.GetType()
将返回没有LabelName
属性的System.Linq.Expressions.ParameterExpression
您应该使用
typeof(dt_Label).GetProperty(“LabelName”)
而无需进一步查看,我可以看到param.GetType().GetProperty(“LabelName”)
是错误的-您可能需要typeof(dt\U标签)
在这里。为什么需要表达式树?在这个问题中似乎没有问题。你的问题是什么?我的问题是如何构建表达式:List lstLabName=dt_Label.Select(x=>x.LabelName).Where(p=>p.LabelName.StartsWith(lstName+'.');我需要表达式树,因为“lstName”是字符串列表,我希望表达式在其中迭代。我的运行时错误在CreateBaryExpression函数上失败,如果不进一步查看,我可以看到param.GetType().GetProperty(“LabelName”)
是错误的-您可能需要typeof(dt\U标签)
在这里。为什么需要表达式树?在这个问题中似乎没有问题。你的问题是什么?我的问题是如何构建表达式:List lstLabName=dt_Label.Select(x=>x.LabelName).Where(p=>p.LabelName.StartsWith(lstName+'.');我需要表达式树,因为“lstName”是字符串列表,我希望表达式在其中迭代。我的运行时错误在CreateBaryExpression函数上失败,而不是:var key=param.GetType().GetProperty(“LabelName”);我尝试过:var key=param.Type.GetField(“LabelName”);但是key会为null,为什么?我想得到的是:dt_Label.LabelName然后尝试typeof(dt_Label).GetProperty(“LabelName”)
。关于param.Type
我可能是错的,谢谢你这么多的帮助:var key=typeof(dt_Label).GetProperty(“LabelName”);用你的评论写一个新的答案,我会写这就是答案,到目前为止,我该怎么做呢?原样:Expression.startsWith代替:var key=param.GetType().GetProperty(“LabelName”);我尝试过:var key=param.Type.GetField(“LabelName”);但是key会为null,为什么?我想得到的是:dt_Label.LabelName然后尝试typeof(dt_Label).GetProperty(“LabelName”)
。关于param.Type
我可能是错的,谢谢你这么多的帮助:var key=typeof(dt_Label).GetProperty(“LabelName”);用你的评论写一个新的答案,我会写这就是答案,到目前为止,我该怎么做呢?原样:Expression.StartsWith
private Expression CreateBinaryExpression(string buildName)
{
// x.LabelName
var param = Expression.Parameter(typeof(dt_Label), "x");
var key = typeof(dt_Label).GetProperty("LabelName");
var left = Expression.MakeMemberAccess(param, key);
ConstantExpression constantExpression = Expression.Constant(buildName + '_', typeof(string));
//x.LabelName.startsWith(buildName_)
MethodInfo mi = typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) });
Expression call = Expression.Call(left, mi, constantExpression);
return call;
};
var key = param.GetType().GetProperty("LabelName");