CSharp: Neo4j .NET Driver Manual

sql:

sql 复制代码
MATCH (p:Person) RETURN p.name AS name
cs 复制代码
/// <summary>
/// http://localhost:7474/browser/
/// D:\neo4j\neo4j-community-5.26.0\bin>neo4j.bat console
/// geovindu,Geovin Du
/// </summary>
public class NodeResult
{
    public string title { get; set; }
    public string label { get; set; }
}
 
public class Movie
{
    public string title { get; set; }
    public int released { get; set; }
    public string tagline { get; set; }
}
 
public class Person
{
    public string Name { get; set; } = "";
 
}
 
 
/// <summary>
/// https://github.com/neo4j/neo4j-dotnet-driver
///https://github.com/neo4j-examples/movies-dotnetcore-bolt
///https://github.com/neo4j-examples/movies-dotnet-bolt
///https://neo4j.com/docs/dotnet-manual/current/session-api/
/// </summary>
public class Neo4jHelper
{
 
    /// <summary>
    ///
    /// </summary>
    private IDriver _driver;
    /// <summary>
    ///
    /// </summary>
    /// <param name="uri"></param>
    /// <param name="user"></param>
    /// <param name="password"></param>
    public Neo4jHelper(string uri, string user, string password)
    {
 
 
        _driver = GraphDatabase.Driver(uri, AuthTokens.Basic(user, password));
    }
    /// <summary>
    ///
    /// </summary>
    public void close()
    {
        _driver.CloseAsync();
        _driver.Dispose();
 
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="message"></param>
    /// <returns></returns>
    public async Task PrintGreetingAsync(string message)
    {
        var session = _driver.AsyncSession();
        var greeting = await session.ExecuteWriteAsync(
            async tx =>
            {
                var result = await tx.RunAsync(
                    "CREATE (a:Greeting) " +
                    "SET a.message = $message " +
                    "RETURN a.message + ', from node ' + id(a)",
                    new { message });
 
                var record = await result.SingleAsync();
                return record[0].As<string>();
            });
 
        Console.WriteLine(greeting);
    }
    /// <summary>
    /// 查询
    /// </summary>
    /// <returns></returns>
    public async Task<List<IRecord>> getQuery()
    {
 
 
        List<IRecord> record = new List<IRecord>();
        //var data= _driver.ExecutableQuery("MATCH (p:Person) RETURN p.name AS name");
        var session = _driver.AsyncSession();
 
        //var exeResult = session.ExecuteWriteAsync(async x =>
        //{
        //    var result = await x.RunAsync("MATCH (p:Person) RETURN p.name AS name");
        //    return await result.ToListAsync();
        //});
        //await exeResult;
 
        // or:
        // exeResult.Wait();
 
 
        var exeResult = session.ExecuteWriteAsync(async x =>
        {
            var result = await x.RunAsync("MATCH (p:Person) RETURN p.name AS name");
            //return await result.ToListAsync();
            record = await result.ToListAsync();
        });
 
        try
        {
            await exeResult;
        }
        catch (ClientException ex)
        {
            Console.WriteLine(ex);
        }
        return record;
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="limit"></param>
    /// <returns></returns>
    public async Task getQuerylist(int limit = 100)
    {
        //string dbConfig = "";
        //var(result, _, _) = await _driver.ExecutableQuery(query).ExecuteAsync();  //.WithConfig(new QueryConfig(database: "neo4j")).ExecuteAsync()
        // IExecutableQuery<records,summary> a= _driver.ExecutableQuery(query);
        // IExecutableQuery<IRecord, IRecord> aa = ExecutableQuery(string cypher);
 
        // return records;
        //return result;
        var statementText = "MATCH (a:Person)-[:ACTED_IN]->(m:Movie) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}";
        var statementParameters = new Dictionary<string, object> { { "limit", limit } };
 
        var nodes = new List<NodeResult>();
        var relationships = new List<object>();
        // _driver.AsyncSession();
 
         
        using (var session = _driver.AsyncSession())
        {
            var result = await session.RunAsync(statementText, statementParameters);
            var i = 0;
            var records= await result.ToListAsync();
            foreach (var record in records)
            {
                var target = i;
                nodes.Add(new NodeResult { title = record["movie"].As<string>(), label = "movie" });
                i += 1;
 
                var castMembers = record["cast"].As<List<string>>();
                foreach (var castMember in castMembers)
                {
                    var source = nodes.FindIndex(c => c.title == castMember);
                    if (source == -1)
                    {
                        nodes.Add(new NodeResult { title = castMember, label = "actor" });
                        source = i;
                        i += 1;
                    }
                    relationships.Add(new { source, target });
                }
            }
            //result.ToListAsync();
        }
 
         
 
    }
 
}

调用

cs 复制代码
Neo4jHelper helper = new Neo4jHelper("bolt://localhost:7687", "neo4j", "geovindu");
var a= await helper.getQuery();
Response.Write(a.Count());
foreach (var record in a)
{
     
    Response.Write(record["name"].ToString()+"<br/>");     
    //Response.Write(record[0].ToString() + "<br/>");
}

输出:

相关推荐
隆里卡那唔7 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样7 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
晋丑丑12 天前
从 0 到 1 构建 Graph RAG 系统:本地图谱 + 通义千问落地实践
前端·后端·python·neo4j
Lightning_201712 天前
Neo4j.5.X社区版创建数据库和切换数据库
数据库·oracle·neo4j
南城尽相思13 天前
Neo4j常见语句-merge
neo4j
南城尽相思14 天前
Neo4j常用语法-path
neo4j
just-do-it-zzj14 天前
[neo4j]介绍4个开源的知识图谱项目
人工智能·知识图谱·neo4j
2501_9153738815 天前
Neo4j操作指南:修改节点数据与新增节点属性
neo4j
BC-AGIOne16 天前
Tensorflow推理时遇见PTX错误,安装CUDA及CuDNN, 解决问题!
neo4j
南城尽相思16 天前
Neo4j常见语法-unwind
neo4j