我应该为Neo4jClient使用Collection或List还是常规数组?

时间:2013-12-20 22:47:19

标签: neo4jclient

我在使用Collection<>的人的StackOverflow上看到了一些代码对于Neo4jClient,但我无法在任何命名空间中找到它。

此外,我无法在Github页面上找到任何数组或集合。我是Neo4jClient的新手,请原谅新手问题(如果是这样的话)

那么,有人可以告诉我如何使用C#在Neo4jClient中使用数组吗?如有必要,请包含任何名称空间。

我在谈论序列化数组(例如:string [],List或Collection<>)

由于

1 个答案:

答案 0 :(得分:0)

Cypher查询的最后一步,.Results返回IEnumerable。你可以用它做任何你想做的事。每次枚举它时,它都会针对Neo4j运行查询。

例如,

var users = client.Cypher
    .Match("(user:User)")
    .Return(user => user.As<User>())
    .Results;

foreach (var user in users)   // The query actual runs here
{
}

这意味着如果你通过它枚举两次,你实际上会对数据库运行两次查询:

例如,

var users = client.Cypher
    .Match("(user:User)")
    .Return(user => user.As<User>())
    .Results;

foreach (var user in users)   // The query actual runs here
{
}


foreach (var user in users)   // And then it runs again here
{
}

现在,这通常不是你想要的。您不希望将额外的调用发送到数据库,并且您不希望数据更改的风险。

为了解决这个问题,人们通常会使用ToArray()ToList()强制它进行早期枚举。这些来自System.Linq

例如,

var users = client.Cypher
    .Match("(user:User)")
    .Return(user => user.As<User>())
    .Results
    .ToList();   // The query runs here now

foreach (var user in users)   // This just enumerates the in-memory list
{
}


foreach (var user in users)   // This just enumerates the in-memory list
{
}

这些都不是特定于Neo4jClient的:它只是enumerables如何在.NET中运行。