我可以打电话给Cypher's。返回Func<>?

时间:2013-12-26 21:42:59

标签: c# neo4jclient

我正在使用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?

1 个答案:

答案 0 :(得分:1)

returnCode变量声明为Expression<>>,编译器将为您生成表达式:

  

当lambda表达式分配给类型为Expression<TDelegate>的变量,字段或参数时,编译器会发出构建表达式树的指令。

     来自Expression Class

但是因为你的lambda返回anonymous type而不是User类实例,所以你的Func<T, TRresult>泛型参数不匹配。尝试以下:

Expression<Func<ICypherResultItem, User>> returnCode = (user) => user.As<User>;