Neo4jのバージョン
このページの例のほとんどは、彼らはスキップして、心の中でのNeo4j 2.0で書かれているSTART
句を、とのような句を使用しますMERGE
。このページの焦点は、しかしサイファー・ツー・C#の構文についてです、そしてあなたがC#にのNeo4j 1.9クエリを翻訳するうえでも同様に有用です。
一日の終わりに、あなたは常に、作業サイファークエリを開始する必要があり、その後同等のC#をうまく。
さらにヘルプが必要ですか?
あなたが作業サイファークエリを持っていますが、C#1にそれを翻訳することができない場合は、ちょうどに投稿http://stackoverflow.com/questions/tagged/neo4jclient、私たちはかなり迅速にあなたを助けるでしょう。
我々は答えを持っていたら、それは他の人々を助けそれでは、私たちも、このページに追加することができます。
Userクラス
以下の例のほとんどは、ユーザノードの構造を表現するために、あなたは以下のクラスを持っていると仮定します。
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
ラベルによって、すべてのユーザーを取得します。
このサイファー:
MATCH (user:User)
RETURN user
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Return(user => user.As<User>())
.Results
特定のユーザーを取得
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
RETURN user
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.Return(user => user.As<User>())
.Results
ユーザー、および彼らの友人の数を取得します。
このサイファー:
OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, count(friend) AS NumberOfFriends
このC#があります:
graphClient.Cypher
.OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
.Where((User user) => user.Id == 1234)
.Return((user, friend) => new {
User = user.As<User>(),
NumberOfFriends = friend.Count()
})
.Results
ユーザー、およびすべての彼らの友人を取得
このサイファー:
OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, collect(friend) AS NumberOfFriends
このC#があります:
graphClient.Cypher
.OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
.Where((User user) => user.Id == 1234)
.Return((user, friend) => new {
User = user.As<User>(),
Friends = friend.CollectAs<User>()
})
.Results
ユーザーを作成します。
このサイファー:
CREATE (user:User { Id: 456, Name: 'Jim' })
パラメータを使用する必要があります。
CREATE (user:User {newUser})
そして、このC#のです:
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Create("(user:User {newUser})")
.WithParam("newUser", newUser)
.ExecuteWithoutResults();
私たちは、明示的に名前付きパラメータ(使用していることに注意してくださいnewUser
)、クエリ、およびWithParam
それを供給するための方法を。これは、安全な私たちのエンコーディングを保持サイファー・インジェクション攻撃から保護し、クエリプランをキャッシュできるようにすることにより、パフォーマンスを向上させます。
彼らはまだ存在しない場合にのみ、ユーザーを作成します。
このサイファー:
MERGE (user:User { Id: 456 })
ON CREATE user
SET user.Name = 'Jim'
パラメータを使用する必要があります。
CREATE (user:User { Id: {id} })
ON CREATE user
SET user = {newUser}
そして、このC#のです:
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Merge("(user:User { Id: {id} })")
.OnCreate()
.Set("user = {newUser}")
.WithParams(new {
id = newUser.Id,
newUser
})
.ExecuteWithoutResults();
ユーザーを作成し、既存のものにそれらを関連付けます
このサイファー:
MATCH (invitee:User)
WHERE invitee.Id = 123
CREATE invitee-[:INVITED]->(invited:User {newUser})
このC#があります:
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Match("(invitee:User)")
.Where((User invitee) => invitee.Id == 123)
.Create("invitee-[:INVITED]->(invited:User {newUser})")
.WithParam("newUser", newUser)
.ExecuteWithoutResults();
2人の既存のユーザーを関連付けます
このサイファー:
MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE user1-[:FRIENDS_WITH]->user2
このC#があります:
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == 123)
.AndWhere((User user2) => user2.Id == 456)
.Create("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();
彼らはすでに関連していない場合にのみ、2人の既存のユーザーを関連付けます
このサイファー:
MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE UNIQUE user1-[:FRIENDS_WITH]->user2
このC#があります:
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == 123)
.AndWhere((User user2) => user2.Id == 456)
.CreateUnique("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();
ユーザーに単一のプロパティを更新します。
このサイファー:
MATCH (user:User)
WHERE user.Id = 123
SET user.Age = 25
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 123)
.Set("user.Age = {age}")
.WithParam("age", 25)
.ExecuteWithoutResults();
注意:我々は、データを渡すために、再度パラメータを使用しています。決してのような文字列の連結を経由してこれを実行しないSet("user.Age = " + age.ToString())
そうでなければ、エンコードのバグ、セキュリティリスクを導入し、大幅のNeo4j自体にクエリプランのキャッシュをバイパスすることによって、クエリのパフォーマンスに影響を与えます。
ユーザーのすべてのプロパティを置き換え
このサイファー:
MATCH (user:User)
WHERE user.Id = 123
SET user = { Id: 123, Age: 25, Email: '[email protected]' }
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 123)
.Set("user = {tatham}")
.WithParam("tatham", new User { Id = 123, Age = 25, Email = "[email protected]" })
.ExecuteWithoutResults();
ユーザーを削除します。
このサイファー:
MATCH (user:User)
WHERE user.Id = 123
DELETE user
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 123)
.Delete("user")
.ExecuteWithoutResults();
ユーザーとすべてのインバウンド関係を削除します。
このサイファー:
OPTIONAL MATCH (user:User)<-[r]-()
WHERE user.Id = 123
DELETE r, user
このC#があります:
graphClient.Cypher
.OptionalMatch("(user:User)<-[r]-()")
.Where((User user) => user.Id == 123)
.Delete("r, user")
.ExecuteWithoutResults();
特定のユーザーのすべてのラベルを取得します。
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
RETURN labels(user)
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.Return(user => user.Labels())
.Results
特定のユーザーのすべてのラベルを取得し、まだユーザーあまりにも
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
RETURN user, labels(user)
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.Return(user => new {
User = user.As<User>(),
Labels = user.Labels()
})
.Results
ユーザーを取得し、その後、ユーザーとリターンにこの番号を追加する彼らの友人を数えます。
注:これはのNeo4j 3.0ストアドプロシージャを使用した例です。オブジェクトにプロパティを追加する他の方法があり、これは使用し、CALL、歩留まりの一例でAPOCのNeo4jストアドプロシージャ
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
WITH user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends
CALL apoc.map.setKey(user, 'numberOfFriends', numberOfFriends) YIELD value AS userWithFriends
RETURN userWithFriends
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.With("user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends")
.Call("apoc.map.setKey(user, 'numberOfFriends', numberOfFriends)").Yield("value AS userWithFriends")
.Return(userWithFriends => new {
User = userWithFriends.As<User>()
})
.Results
オリジナル住所ます。https://www.cnblogs.com/ulex/p/6066083.html
Neo4jのバージョン
このページの例のほとんどは、彼らはスキップして、心の中でのNeo4j 2.0で書かれているSTART
句を、とのような句を使用しますMERGE
。このページの焦点は、しかしサイファー・ツー・C#の構文についてです、そしてあなたがC#にのNeo4j 1.9クエリを翻訳するうえでも同様に有用です。
一日の終わりに、あなたは常に、作業サイファークエリを開始する必要があり、その後同等のC#をうまく。
さらにヘルプが必要ですか?
あなたが作業サイファークエリを持っていますが、C#1にそれを翻訳することができない場合は、ちょうどに投稿http://stackoverflow.com/questions/tagged/neo4jclient、私たちはかなり迅速にあなたを助けるでしょう。
我々は答えを持っていたら、それは他の人々を助けそれでは、私たちも、このページに追加することができます。
Userクラス
以下の例のほとんどは、ユーザノードの構造を表現するために、あなたは以下のクラスを持っていると仮定します。
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
ラベルによって、すべてのユーザーを取得します。
このサイファー:
MATCH (user:User)
RETURN user
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Return(user => user.As<User>())
.Results
特定のユーザーを取得
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
RETURN user
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.Return(user => user.As<User>())
.Results
ユーザー、および彼らの友人の数を取得します。
このサイファー:
OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, count(friend) AS NumberOfFriends
このC#があります:
graphClient.Cypher
.OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
.Where((User user) => user.Id == 1234)
.Return((user, friend) => new {
User = user.As<User>(),
NumberOfFriends = friend.Count()
})
.Results
ユーザー、およびすべての彼らの友人を取得
このサイファー:
OPTIONAL MATCH (user:User)-[FRIENDS_WITH]-(friend:User)
WHERE user.Id = 1234
RETURN user, collect(friend) AS NumberOfFriends
このC#があります:
graphClient.Cypher
.OptionalMatch("(user:User)-[FRIENDS_WITH]-(friend:User)")
.Where((User user) => user.Id == 1234)
.Return((user, friend) => new {
User = user.As<User>(),
Friends = friend.CollectAs<User>()
})
.Results
ユーザーを作成します。
このサイファー:
CREATE (user:User { Id: 456, Name: 'Jim' })
パラメータを使用する必要があります。
CREATE (user:User {newUser})
そして、このC#のです:
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Create("(user:User {newUser})")
.WithParam("newUser", newUser)
.ExecuteWithoutResults();
私たちは、明示的に名前付きパラメータ(使用していることに注意してくださいnewUser
)、クエリ、およびWithParam
それを供給するための方法を。これは、安全な私たちのエンコーディングを保持サイファー・インジェクション攻撃から保護し、クエリプランをキャッシュできるようにすることにより、パフォーマンスを向上させます。
彼らはまだ存在しない場合にのみ、ユーザーを作成します。
このサイファー:
MERGE (user:User { Id: 456 })
ON CREATE user
SET user.Name = 'Jim'
パラメータを使用する必要があります。
CREATE (user:User { Id: {id} })
ON CREATE user
SET user = {newUser}
そして、このC#のです:
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Merge("(user:User { Id: {id} })")
.OnCreate()
.Set("user = {newUser}")
.WithParams(new {
id = newUser.Id,
newUser
})
.ExecuteWithoutResults();
ユーザーを作成し、既存のものにそれらを関連付けます
このサイファー:
MATCH (invitee:User)
WHERE invitee.Id = 123
CREATE invitee-[:INVITED]->(invited:User {newUser})
このC#があります:
var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
.Match("(invitee:User)")
.Where((User invitee) => invitee.Id == 123)
.Create("invitee-[:INVITED]->(invited:User {newUser})")
.WithParam("newUser", newUser)
.ExecuteWithoutResults();
2人の既存のユーザーを関連付けます
このサイファー:
MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE user1-[:FRIENDS_WITH]->user2
このC#があります:
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == 123)
.AndWhere((User user2) => user2.Id == 456)
.Create("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();
彼らはすでに関連していない場合にのみ、2人の既存のユーザーを関連付けます
このサイファー:
MATCH (user1:User), (user2:User)
WHERE user1.Id = 123, user2.Id = 456
CREATE UNIQUE user1-[:FRIENDS_WITH]->user2
このC#があります:
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == 123)
.AndWhere((User user2) => user2.Id == 456)
.CreateUnique("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();
ユーザーに単一のプロパティを更新します。
このサイファー:
MATCH (user:User)
WHERE user.Id = 123
SET user.Age = 25
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 123)
.Set("user.Age = {age}")
.WithParam("age", 25)
.ExecuteWithoutResults();
注意:我々は、データを渡すために、再度パラメータを使用しています。決してのような文字列の連結を経由してこれを実行しないSet("user.Age = " + age.ToString())
そうでなければ、エンコードのバグ、セキュリティリスクを導入し、大幅のNeo4j自体にクエリプランのキャッシュをバイパスすることによって、クエリのパフォーマンスに影響を与えます。
ユーザーのすべてのプロパティを置き換え
このサイファー:
MATCH (user:User)
WHERE user.Id = 123
SET user = { Id: 123, Age: 25, Email: '[email protected]' }
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 123)
.Set("user = {tatham}")
.WithParam("tatham", new User { Id = 123, Age = 25, Email = "[email protected]" })
.ExecuteWithoutResults();
ユーザーを削除します。
このサイファー:
MATCH (user:User)
WHERE user.Id = 123
DELETE user
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 123)
.Delete("user")
.ExecuteWithoutResults();
ユーザーとすべてのインバウンド関係を削除します。
このサイファー:
OPTIONAL MATCH (user:User)<-[r]-()
WHERE user.Id = 123
DELETE r, user
このC#があります:
graphClient.Cypher
.OptionalMatch("(user:User)<-[r]-()")
.Where((User user) => user.Id == 123)
.Delete("r, user")
.ExecuteWithoutResults();
特定のユーザーのすべてのラベルを取得します。
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
RETURN labels(user)
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.Return(user => user.Labels())
.Results
特定のユーザーのすべてのラベルを取得し、まだユーザーあまりにも
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
RETURN user, labels(user)
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.Return(user => new {
User = user.As<User>(),
Labels = user.Labels()
})
.Results
ユーザーを取得し、その後、ユーザーとリターンにこの番号を追加する彼らの友人を数えます。
注:これはのNeo4j 3.0ストアドプロシージャを使用した例です。オブジェクトにプロパティを追加する他の方法があり、これは使用し、CALL、歩留まりの一例でAPOCのNeo4jストアドプロシージャ
このサイファー:
MATCH (user:User)
WHERE user.Id = 1234
WITH user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends
CALL apoc.map.setKey(user, 'numberOfFriends', numberOfFriends) YIELD value AS userWithFriends
RETURN userWithFriends
このC#があります:
graphClient.Cypher
.Match("(user:User)")
.Where((User user) => user.Id == 1234)
.With("user, size((user)-[:IS_FRIENDS_WITH]->(:Friend)) as numberOfFriends")
.Call("apoc.map.setKey(user, 'numberOfFriends', numberOfFriends)").Yield("value AS userWithFriends")
.Return(userWithFriends => new {
User = userWithFriends.As<User>()
})
.Results
オリジナル住所ます。https://www.cnblogs.com/ulex/p/6066083.html