C# 尝试基于属性构建要选择的动态lambda表达式

C# 尝试基于属性构建要选择的动态lambda表达式,c#,linq,dynamic,lambda,expression,C#,Linq,Dynamic,Lambda,Expression,试图构建动态Lambda表达式以基于用户提供的属性名进行选择,但出现错误“为Lambda声明提供的参数数量不正确”。我正在努力做到这一点:()=>myObj.propName 以下是我的代码的最新版本: var parameter = Expression.Parameter(typeof(myObjType), propName); MemberExpression exp = Expression.PropertyOrField(parameter, propName);

试图构建动态Lambda表达式以基于用户提供的属性名进行选择,但出现错误“为Lambda声明提供的参数数量不正确”。我正在努力做到这一点:
()=>myObj.propName

以下是我的代码的最新版本:

    var parameter = Expression.Parameter(typeof(myObjType), propName);
    MemberExpression exp = Expression.PropertyOrField(parameter, propName);
    var func = Expression.Lambda<Func<string>>(exp, parameter).Compile();
var parameter=Expression.parameter(typeof(myObjType),propName);
MemberExpression=Expression.PropertyOrField(参数,propName);
var func=Expression.Lambda(exp,parameter.Compile();
错误发生在最后一行。我在某处和其他地方看到过一些类似的事情,它们让我走了这么远,但我不知道我做错了什么。现在,我尝试使用的所有属性都是字符串


谢谢。

要使用动态表达式(作为字符串)进行查询,您可以使用Microsoft的Scott Gu

检查答案以了解详细信息


该表达式抽象了复杂的表达式。*调用简单的Linq语法,该语法接受属性名为
string

您的意思是
myObj=>myObj.propName
?现在还不清楚你是真的在追求一个
Func
还是一个
Func
(在后一种情况下,你希望从哪里获得
myObj
),现在我们已经超越了我对Linq的理解。我试图将
func
传递到第三方库中具有以下签名的方法:
ThirdPartyMethod(func func)
。如果我不尝试动态构建表达式,我只是将其硬编码为
()=>myObj.PropName
。如果有帮助的话,第三方库是TypeMock Isolator,我正在尝试创建此行的动态实例:
Isolate.WhenCalled(()=>myObj.PropName).WillReturn(fakeValue)
谢谢@jonsketwell,lambda表达式为
()=>myObj.PropName
,没有参数-那么
myObj
在哪里声明?是的…肯定超出了我现在对Linq的理解…;-)下面是一个更完整的代码示例:var fakeObj=fakenexistanceof();当调用(()=>fakeObj.MyProp).WillReturn(“ddd”);这有用吗?真的很感谢你在这件事上和我在一起。我正在努力学习更多的Linq,并且已经深入到了这里。这并不是Linq特有的。您知道
()=>myObj.PropName
没有参数吗?这只是lambda表达式。。。
=>
前面的位是参数列表,这里有一个空列表。。。