Neo4jClient和Cypher Query有不同的订单返回结果

时间:2014-07-11 16:26:40

标签: neo4j cypher neo4jclient

我对Neo4j,Neo4jClient和Cypher Query都很陌生。 我正在实现图形数据模型和算法。所以,我在Neo4j图形数据库上有自己的egonetwork。 这是我的Cypher Query我正在尝试检索指定用户的egonetwork。

MATCH(user:User {userID : '1'})-[:ego1*]->(friend)-[:LATEST_ACTIVITY]->(latest_activity)-[:NEXT*]->(next_activity)
RETURN friend, latest_activity, next_activity

结果如下:enter image description here 所以,你看,订单是: 2 3 4(userID)

这是我用Neo4jClient转换的代码

var query = graphClient.Cypher.Match("(user:User {userID : '1'})-[:ego1*]->(friend)-[:LATEST_ACTIVITY]->(latest_activity)-[:NEXT*]->(next_activity)").
                Return((friend, latest_activity, next_activity) => new
                {
                    friends = friend.As<User>(),
                    latest_activity = latest_activity.As<Activity>(),
                    next_activities = next_activity.CollectAs<Activity>()
                }).Results;
        List<User> friendList = new List<User>();
        List<List<Activity>> activities = new List<List<Activity>>();
        List<Activity> activity, tmp;
        foreach (var item in query)
        {
            friendList.Add(item.friends);
            Console.Write("UserID: " + item.friends.userID + ". Activities: ");
            activity = new List<Activity>();
            activity.Add(item.latest_activity);
            Console.Write(item.latest_activity.timestamp);
            foreach (var i in item.next_activities)
            {
                activity.Add(i.Data);
                Console.Write(i.Data.timestamp);
            }
            activities.Add(activity);
            Console.WriteLine();
        }

这是上面代码的结果: enter image description here

您看到的订单是 3 2 4(userID)

你能解释一下为什么并告诉我如何解决?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

嗯,你的疑问肯定不同;例如,使用Neo4jclient的人有一个collect。他们将遵循不同的执行计划,除非您明确指定,否则他们可以以不同的顺序返回结果。

使用ORDER BY指定订单。否则你不能作出任何假设。

我甚至看到查询以不同的顺序返回结果,而字母大小写只有差异(低写大写字母)。