Neo4jClient - “.Where((TUser u) => u.Id == user.Id)”与“.Where("u.Id = {param}").WithParam("param", user.Id)"

Neo4jClient - difference between " .Where((TUser u) => u.Id == user.Id) " vs " .Where("u.Id = {param}").WithParam("param", user.Id) "

我对使用

之间的区别有疑问
db.Cypher.Match("(u:User)").Where((TUser u) => u.Id == user.Id)  

对比

db.Cypher.Match("(u:User)").Where("u.Id = {param}").WithParam("param", user.Id)

第一个是否存在任何安全风险(注入),但我询问了性能差异,因为似乎第一个检查查询在 Web 应用程序进程上执行,但第二个检查查询由 Neo4j 数据库执行实例.

完全没有区别

在第一个例子中,我们自动为您将其移动到一个参数中:https://github.com/Readify/Neo4jClient/wiki/cypher#parameters

该参数将自动命名为 p0

您可以通过查看 QueryText 来查看实际发生了什么:https://github.com/Readify/Neo4jClient/wiki/cypher#debugging

你的两个例子都没有注入风险。在这两种情况下,id 都得到了安全处理。如果你进行字符串连接,就会有注入风险,比如 Where("u.Id = " + user.Id.ToString()).

至于性能,在您调用 .Results 之前,您编写的所有内容仍会打包到查询中并在 Neo4j 上执行。 == 比较实际上从未在 .NET 中执行:您只是使用 C# 来表达您的查询,然后我们将表达式树分开并为您将其重新写入 Cypher。