Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将返回值组合到单个类型中_C#_Neo4j_Cypher_Neo4jclient - Fatal编程技术网

C# 将返回值组合到单个类型中

C# 将返回值组合到单个类型中,c#,neo4j,cypher,neo4jclient,C#,Neo4j,Cypher,Neo4jclient,我与Neo4j的关系如下: (a:Article)<-[:TRANSLATES]-(t:ArticleTranslation) 从这里,我了解到我可以轻松地将(a,t)映射到包含两个对象实例的匿名对象,例如: new { Article = new Article { /* Article Properties */ }, Translation = new ArticleTranslation { /* Translation Properties */ } } 但是,在我的

我与Neo4j的关系如下:

(a:Article)<-[:TRANSLATES]-(t:ArticleTranslation)
从这里,我了解到我可以轻松地将
(a,t)
映射到包含两个对象实例的匿名对象,例如:

new { Article = new Article { /* Article Properties */ },
    Translation = new ArticleTranslation { /* Translation Properties */ } }
但是,在我的应用程序中,将“文章”和“翻译”作为一个单独的实体进行处理更有用(更直观),例如:

public class Article
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public string LanguageCode { get; set; }
}
为此,我添加了以下内容:

.Return((a, t) => new Article
    {
        Id = a.As<Article>().Id,
        Title = t.As<Article>().Title,
        Body = t.As<Article>().Body,
        LanguageCode = t.As<Article>().LanguageCode
    });
.Return((a,t)=>新文章
{
Id=a.As().Id,
Title=t.As().Title,
Body=t.As().Body,
LanguageCode=t.As().LanguageCode
});
但是,这很难处理(尤其是在增加属性数量时),而且看起来可能会调用重复映射


有没有一种更简洁的方式来表达这一点,而不引入独立的
articletransformation
实体?

您可以告诉Neo4jClient生成任意的Cypher
RETURN
语句,并将其映射到所需的类型,方法是传入一个无参数委托:

.Return(() => Return.As<ArticleTranslation>(
    "{ArticleId:a.Id, Title:t.Title, Body:t.Body, LanguageCode:t.LanguageCode}"))
.Return(()=>Return.As(
“{ArticleId:a.Id,Title:t.Title,Body:t.Body,LanguageCode:t.LanguageCode}”)

在本例中,Neo4jClient返回字面映射,然后映射到
articletransformation
类型。

在任何认为这在CodeReview上可能更好的人之前,请快速注意-我不是要对我当前的代码提出批评;这是一个关于
neo4jclient
API的问题。在cypher中,您可以使用
RETURN{id:a.id,title:t.title,body:t.body,code:t.languageCode}创建文字映射
不知道如何从neo4jclient中使用它。@MichaelHunger这是我不能完全协调的部分-我问题中的fluent
Return
大致映射到了这个Return语句,但是Lambda的输入类型是
ICypherResultItem
,这导致需要笨重的
x。As()
映射以使强类型赋值成为可能。我相信一定有更干净的方法来处理它。
.Return(() => Return.As<ArticleTranslation>(
    "{ArticleId:a.Id, Title:t.Title, Body:t.Body, LanguageCode:t.LanguageCode}"))