试图遵循本指南:https://github.com/Readify/Neo4jClient/wiki/cypher-examples#get-all-users-by-label 我需要创建lambda表达式以便将其提供给Return
方法。在C#中,它看起来是这样的:构建方法调用
.Return(n => n.As<Project>())
,并在PowerShell中我已经看,这种方式(按@ PetSerAl的建议:Return overload fails):
$exp = [System.Linq.Expressions.Expression]
$param = $exp::Parameter([Neo4jClient.Cyper.ICypherResultItem], "n")
$body = $exp::TypeAs($p, (new-object Project).GetType())
$lambda = $exp::Lambda([Func[Project]], $body, $p)
使得参数传递给拉姆达表达式被键入以接收Neo4j表达式将传递的内容,并且该方法的主体将其转换为Project
(本地定义的类)。现在我可以将它传递给我的方法:但是
$something.Return($lambda)
,我得到这个错误
异常调用“返回”和“1”的说法(S):“表达式必须 被构建为(例如:n => new MyResultType {Foo = n.Bar}),匿名类型初始值设定项(对于 示例:n => new {Foo = n.Bar}),方法调用例如:n => n.Count())或成员访问器(例如:n => n.As()。Bar)。 无法提供代码块(例如:n => {var a = n + 1; return a; })或使用带参数的构造函数(例如:n => new Foo(n))。如果你在F#中,元组也被支持。参数名称: 表达式“在行:1 char:1 + $ neo.Cypher.Match(”n“)。Return($ return) + ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:ArgumentException的
这使得它清楚我没有“T正确制定lambda表达式的身体任何人都可以提出应该如何,而不是
您是否尝试过建议的第二种方法(用'C#'帮助下)?即使只是为了测试它可以工作,然后再按照你尝试的方式创建'Expressions'。我想你会想要这样的东西:'Expression> Proj =(n)=> n.As ();' –
是的,第二种方式PetSerAl建议的作品,但这会有点清洁工,我只是想弄清楚 – ekkis