Neo4JClient:Match()子句中的参数

时间:2015-10-29 12:47:58

标签: neo4j neo4jclient

我正在尝试创建通用存储库。出于某种原因,在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 ; ^

2 个答案:

答案 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}) ...,则必须指定节点标签,因此您得到了解析错误,因为您没有为匹配的节点指定标签。