很难从 Cypher 查询中取回频率

Having difficultly getting the frequency back from a Cypher query

我正在使用 Neo4j 开发大学课程推荐系统,但遇到了这个问题。

我想做的是给系统一个兴趣,然后这个兴趣将与系统中与该兴趣有关系的学生进行检查(:HAS_INTEREST),然后return学生注册的所有课程,以及他们在搜索中出现的频率(将推荐学生人数最多的课程)。为此,我使用此查询:

MATCH (interest:Interest {description:"Computing"})<-[:HAS_INTEREST]-(student:Student),
(student)-[:ENROLLED_IN]->(course:Course)
RETURN course.title, count(course) as frequency
ORDER BY frequency DESC
LIMIT 25

当我使用 Neo4j 浏览器键入查询时,查询 return 是我想要的数据(课程名称和出现频率),但当我尝试在 C# 中进行密码查询时出现问题;我无法获得每门课程的频率。我可以 return 所有课程,甚至已经订购,但我需要他们似乎给出适当推荐的频率。我将在下面列出我的代码

课程Class

    public class Course
    {
        public string title { get; set; }

        public long fequency { get; set; }
    }

密码查询

        public static IEnumerable<Course> GetCourseRecommendation(string interest)
        {
        var data = GraphClient.Cypher
           .Match("(i:Interest {description : {interestDesc} })<-[:HAS_INTEREST]-(student:Student)", "(student)-[:ENROLLED_IN]->(course: Course)")
           .WithParam("interestDesc", interest)
           .With((course, c) => new
           {
               course = course.As<Course>(),
               c = course.Count()
           })
           .Return(course => course.As<Course>())
           .OrderByDescending("c")
           .Limit(25)
           .Results;

        return data;
        }

我将频率属性添加到课程 class 以查看是否可以将其存储在那里,但没有成功,我已经尝试了很多不同的 .net 查询变体以查看是否可以获得频率超出了它,但似乎没有任何效果,它只是 return 课程。

tl;dr 我需要获取课程在查询结果中出现的频率,但不知道如何使用 .Net 库获取此信息。

编辑:回答

感谢 SupamiuChris Skardon 对问题的回答和解释。下面列出了最终的工作查询,这 return 是课程及其在查询中出现的频率。

            var data = GraphClient.Cypher
               .Match("(i:Interest {description : {interestDesc} })<-[:HAS_INTEREST]-(student:Student)", "(student)-[:ENROLLED_IN]->(course: Course)")
               .WithParam("interestDesc", interest)
               .Return((course, c) => new
               {
                   course = course.As<Course>(),
                   c = course.Count()
               })
               .OrderByDescending("c")
               .Limit(25)
               .Results;

问题是你在查询中将 coursefrequency 存储在两个不同的变量中,如果你想为你的课程添加频率,你必须稍后设置它 course.setFrequency(c).

实际上你在做 Return(course => course.As<Course>())course 只包含标题,因为频率存储在 c 中。所以你也必须得到 c 并稍后在 course 中设置它。