gpt4 book ai didi

c# - 将返回值组合成单一类型

转载 作者:行者123 更新时间:2023-11-30 18:28:22 24 4
gpt4 key购买 nike

我有一个看起来像这样的 Neo4j 关系:

(a:Article)<-[:TRANSLATES]-(t:ArticleTranslation)

Article 标签应用于仅包含唯一标识符的节点,ArticleTranslation 标签应用于包含以下内容的节点:

  • 职位
  • 正文
  • 语言代码

然后我有一个 ICypherFluentQuery 是这样构造的:

Match("(t:ArticleTranslation)-[:TRANSLATES]->(a:Article)")
.Where("(a.Id = {id})")
.AndWhere("(t.LanguageCode = {lang} OR (t.LanguageCode = 'en' and NOT a<--(:ArticleTranslation { LanguageCode: {lang} })))")
.WithParams(new { id, lang })

从这里,我了解到我可以轻松地将 (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
});

但是,这很笨拙(尤其是在增加属性数量时)并且看起来可能会调用重复的映射。

有没有更简洁的表达方式而不引入独立的 ArticleTranslation 实体?

最佳答案

您可以告诉 Neo4jClient 生成任意 Cypher RETURN 语句 - 并将其映射到所需的类型 - 通过传入无参数委托(delegate):

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

在此示例中,返回文字映射,然后通过 Neo4jClient 将其映射到 ArticleTranslation 类型。

关于c# - 将返回值组合成单一类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com