【发布时间】:2015-06-04 06:55:40
【问题描述】:
尝试遵循本指南: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)
这样传递给 lambda 表达式的参数被键入以接收 Neo4j 表达式将传递的内容,并且方法体将其转换为 Project(本地定义的类)。现在我可以将它传递给我的方法:
$something.Return($lambda)
但是,我得到了这个错误
使用“1”个参数调用“返回”的异常:“表达式必须 被构造为对象初始化器(例如:n => new MyResultType { Foo = n.Bar }),一个匿名类型初始化器(对于 例如:n => new { Foo = n.Bar }),一个方法调用(例如:n => n.Count()) 或成员访问器(例如:n => n.As().Bar)。你 无法提供代码块(例如:n => { var a = n + 1; 返回一个; })或使用带参数的构造函数(例如:n => new 富(n))。如果您在 F# 中,则还支持元组。参数名称: 表达式”在第 1 行 char:1 + $neo.Cypher.Match("n").Return($return) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [],方法调用异常 + FullyQualifiedErrorId : ArgumentException
这清楚地表明我没有正确地制定 lambda 表达式的主体。谁能建议它应该是怎样的?
【问题讨论】:
-
您尝试过建议的第二种方法吗(在
c#的帮助下)?即使只是为了测试它是否可以工作,然后再以您尝试的方式创建Expressions。我想你会想要这样的东西:Expression<Func<ICypherResultItem, Project>> Proj=(n) => n.As<Project>(); -
是的,PetSerAl 建议的第二种方式可行,但这会更简洁一些,我只是想弄清楚