我正在使用Neo4jClient for C#,它的工作非常出色!谢谢Tatham Oddie。
在运行时,我需要根据某些条件返回不同的结果。我看到Return基本上是定义和重载的:
ICypherFluentQuery<TResult> Return<TResult>(Expression<Func<ICypherResultItem, TResult>> expression);
由于TResult是一个模板化的参数,我不确定如何创建一个Func&lt;&gt;我可以传递给.Return
理想情况下,我想做这样的事情:
Func<ICypherResultItem, User> returnCode = (user) => new { u = user.As<User> } ;
var query = client
.Cypher
.Start(new { root = client.RootNode })
.Match("root-[:HAS_BOOK]->user");
.Return( returnCode );
这可能吗?如何声明Func&lt;&gt;传递给Return?
答案 0 :(得分:1)
将returnCode
变量声明为Expression<>>
,编译器将为您生成表达式:
当lambda表达式分配给类型为
来自Expression Class 的Expression<TDelegate>
的变量,字段或参数时,编译器会发出构建表达式树的指令。
但是因为你的lambda返回anonymous type而不是User
类实例,所以你的Func<T, TRresult>
泛型参数不匹配。尝试以下:
Expression<Func<ICypherResultItem, User>> returnCode = (user) => user.As<User>;