【问题标题】:Error with explicit conversion when using CollectAs<>使用 CollectAs<> 时显式转换出错
【发布时间】:2015-07-22 12:36:15
【问题描述】:

是的,我有一个非常简单的问题,但我一辈子都想不出真正简单的答案来解决它。 此代码应该返回一个“Person”,其中包含一组语言和国家/地区。

return client.Cypher
            .Match("(person:Person)")
            .Where((Person person) => person.Email == username)
            .OptionalMatch("(person)-[:SPEAKS]-(language:Language)")
            .OptionalMatch("(person)-[:CURRENT_LOCATION]-(country:Country)"
            .Return((person, language, country) => new ProfileObject
            {
                Person = person.As<Person>(),
                Language = language.CollectAs<Language>(),
                Country = country.CollectAs<Country>()
            }).Results.ToList();

在我看来它是正确的,但它不是,在构建时我收到此错误,我理解但无法解决。

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Neo4jClient.Node<Graph.Country>>' to 'Graph.Country'. An explicit conversion exists (are you missing a cast?)

Language 类如下所示

public class Language
{
    public string Name { get; set; }
}

ProfileObject 类看起来像这样:

public class ProfileObject
{
    public Person Person { get; set; }
    public Language Language { get; set; }
    public Country Country { get; set; }
}

我真的卡住了,请帮忙。

【问题讨论】:

    标签: c# neo4jclient


    【解决方案1】:

    CollectAs 返回一组节点。

    您需要将ProfileObject 更改为:

    public class ProfileObject
    {
        public Person Person { get; set; }
        public IEnumerable<Node<Language>> Language { get; set; }
        public IEnumerable<Node<Country>> Country { get; set; }
    }
    

    在即将对包进行的更新中,Node&lt;T&gt; 包装器已从签名中删除,因此它将是:

    public class ProfileObject
    {
        public Person Person { get; set; }
        public IEnumerable<Language> Language { get; set; }
        public IEnumerable<Country> Country { get; set; }
    }
    

    如果您现在想获得更清晰的签名,请查看 NuGet (https://www.nuget.org/packages/Neo4jClient/1.1.0-Tx00009) 上的预发布包。

    【讨论】:

    • 虽然这确实解决了问题中提出的问题,但它确实提出了另一个问题。此方法正在通过 Web 服务调用,附加的 IEnumerable> 会引发错误。无法序列化,因为 Country 是一个接口,对此有什么好的建议吗?
    • 看来我遇到了限制或心理障碍,此线程 (stackoverflow.com/questions/31630614/…) 总结了哪里出错了。我们找到了一种序列化结果的方法,但我们得到一个错误“Neo4jClient.Node`1[Graph.Language] 无法序列化,因为它没有无参数的构造函数。”并且错误 appears 是 Neo4jClient.Node 不是无参数的,并且不能这样做。
    • 如果有人发现这个线程有类似的问题,Tatham 上面的回答非常棒,但是如果你在那之后得到序列化错误,那么这个线程:stackoverflow.com/questions/31630614/… 可能会填补解决方案的其余部分。这些人的工作非常出色,真的。
    猜你喜欢
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多