【问题标题】:How to assign data to a variable? [duplicate]如何将数据分配给变量? [复制]
【发布时间】:2020-01-30 16:19:23
【问题描述】:

我正在尝试根据可用的示例将 Neo4j 数据库中的数据分配给 C# 中的变量,如下所示:

    var born = graphClient.Cypher
            .Match("(person:Person)")
            .Where((Person person) => person.name == "Tom Hanks")
            .Return(person => person.As<Person>().born)
            .Results;

但是当我尝试将值打印出来时:

    Console.WriteLine(born);

我在控制台中得到了这个:

    System.Collections.Generic.List`1[System.Int32]

我做错了什么?

【问题讨论】:

标签: c# neo4jclient


【解决方案1】:

从您的输出中,您会收到一组与您的过滤器匹配的项目。 如果要打印第一个元素,可以执行以下操作:

Console.WriteLine(born.First());

请记住,在该集合中,它可能包含多个元素...

如果要打印所有出生的项目,可以使用 foreach 循环来执行此操作: 您只需要执行以下操作:

foreach (var item in born)
{
    Console.WriteLine(item);
}

使用 foreach 循环是最好的方法,因为即使集合中有 0 个元素,它也会按预期工作(即:它不会失败或抛出异常) 您必须小心使用 First() ,因为如果您的集合为空,它将引发异常。因此,如果您知道最终可能会得到一个空集合,那么您始终可以使用 FirstOrDefault() 来返回 null - 或根据数据类型返回默认值 - 在空集合的情况下

【讨论】:

  • 这种情况下如何使用foreach:var about = graphClient.Cypher .OptionalMatch("(person:Person)-[ACTED_IN]-&gt;(movie:Movie)") .Where((Person person) =&gt; person.name == "Tom Hanks") .Return((person, movie) =&gt; new { Person = person.As&lt;Person&gt;().name, Date = person.As&lt;Person&gt;().born, NumberOfRoles = movie.Count(), Movie = movie.As&lt;Movie&gt;().title }) .Results;当我返回超过1个值时?
  • @Karas:我已经编辑了我的答案,其中包含有关使用 foreach 循环和 LINQ 的 First() 方法的更多信息。我希望你觉得它有用
【解决方案2】:

由于born 指的是一个列表,您需要遍历这些项目:

foreach (int item in born)
{
    Console.WriteLine(item);
}

Console.WriteLine 在传递的对象上调用ToString(),正如您所观察到的,对于大多数类型来说,这将是类型名称。

当你像上面那样迭代时,它会在列表中写入每个整数的字符串表示形式。

【讨论】:

  • 在这种情况下如何使用 foreach 进行打印? var about = graphClient.Cypher .OptionalMatch("(person:Person)-[ACTED_IN]->(movie:Movie)") .Where((Person person) => person.name == "Tom Hanks") .Return( (person, movie) => new { Person = person.As().name, Date = person.As().born, NumberOfRoles = movie.Count() }) .Results;当我想返回多个值时?
  • @Karas 这是为了调试目的吗?如果是这样,您最好使用debugger
  • 不,我想使用数据,我返回 3 个值并想在不同情况下使用每个值
【解决方案3】:

要么序列化您的“出生”集合并打印,要么从该“出生”列表中逐个处理并打印

Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(born));

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2019-12-03
    • 2016-07-10
    • 2016-04-26
    • 2014-06-27
    相关资源
    最近更新 更多