我正在尝试创建通用存储库。出于某种原因,在Match()子句中使用参数似乎不起作用。谁知道问题可能是什么?我的代码看起来像这样(我是一个C#/。net Developer):
private IEnumerable<T> GetNodCollectionByLabel<T>(string nodLabel)
{
IEnumerable<T> entityList = new List<T>();
entityList = _graphClient.Cypher
.Match("(entity:{nodLabel})")
.WithParam("nodLabel", nodLabel)
.Return(entity => entity.As<T>())
.Results;
return entityList.ToArray();
}
例外是:
语法异常:无效的输入&#39; {&#39;:预期的空格或标签名称(第1行,第15列(偏移:14))&#34; MATCH(实体:{nodLabel})&#34 ; ^
答案 0 :(得分:1)
.withParam()用于表示Cypher参数,而不是标签。
http://neo4j.com/docs/stable/cypher-parameters.html
您无法使用标签参数。
一种方法是使用String.Format();
private IList<string> GetAllLabels()
{
return _graphClient.Cypher
.Match("(n)")
.Return<List<string>>("DISTINCT labels(n)")
.Results;
}
private bool isValidNode(string name)
{
return GetAllLabels().Contains(name.Trim());
}
private IEnumerable<T> GetNodCollectionByLabel<T>(string nodLabel)
{
IEnumerable<T> entityList = new List<T>();
if (!isValidNodeLabel(nodLabel))
{
return Enumerable.Empty<T>();
}
var statement = String.Format("(entity:{0})", nodLabel);
entityList = _graphClient.Cypher
.Match(statement)
.Return(entity => entity.As<T>())
.Results;
return entityList.ToArray();
}
答案 1 :(得分:0)
试试这个:
angular.element(element).fadeIn(1000, doneFn);
如果你真的有一个名为&#34; nodLabel&#34;它会返回一些数据。
这里的问题是你正在寻找这样的节点:
private IEnumerable<T> GetNodCollectionByLabel<T>(string nodLabel)
{
IEnumerable<T> entityList = new List<T>();
entityList = _graphClient.Cypher
.Match("(entity:nodLabel)")
.WithParam("nodLabel", nodLabel)
.Return(entity => entity.As<T>())
.Results;
return entityList.ToArray();
}
但是如果使用MATCH (entity:{nodLabel}) ...
,则必须指定节点标签,因此您得到了解析错误,因为您没有为匹配的节点指定标签。