Neo4j Driver C# คลี่คลายรายการวัตถุ

ฉันกำลังดูวิธีคลายรายการวัตถุ (ในหน่วยความจำ) ลงใน Neo4j 4.0 ด้านล่างนี้คือสิ่งที่ฉันเคยใช้ Neo4jClient nuget มาก่อน แต่ฉันต้องเปลี่ยนไปใช้ Neo4j.Driver nuget แทน

Neo4jClient (เก่า)

graphClient.Cypher
    .Unwind(towns, "tp")
    .Merge("t:Town {Name: tp.Id})")
    .OnCreate()
    .Set("t = tp")
    .ExecuteWithoutResults();

ไดรเวอร์ Neo4j (เสร็จสิ้นแล้ว)

var session = driver.AsyncSession(o => o.WithDatabase("neo4j"));
        try
        {
            towns = towns.OrderBy(tt => tt.Id).ToList();
            foreach (var t in towns.Split(5000))
            {
                    Console.WriteLine($"Saving {t.Count:N0} of {town.Count:N0} Towns...");    
        **//STUCK HERE DOING UNWIND**  
            }
        }
        catch (Exception ex)
        {
            string error = $"ERROR (ADD TOWNS): {ex.ToString()}";           
            Console.WriteLine(error);
        }
        finally
        {
            await session.CloseAsync();
        }

person Liam    schedule 16.04.2020    source แหล่งที่มา


คำตอบ (1)


น่าเสียดายที่ไดรเวอร์ Neo4j นั้นค่อนข้างเปลือยเปล่า - คุณต้องสร้างแบบสอบถาม Cypher ด้วยมือโดยอ้างถึงพารามิเตอร์ที่จำเป็น จากนั้นส่งพารามิเตอร์เหล่านั้นไปยังแบบสอบถาม

var session = driver.AsyncSession(o => o.WithDatabase("neo4j"));
try
{
    towns = towns.OrderBy(tt => tt.Id).ToList();
    foreach (var t in towns.Split(5000))
    {
        Console.WriteLine($"Saving {t.Count:N0} of {town.Count:N0} Towns...");

        // Just return the town name - in your case, you'd MERGE or whatever, this is 
        // just an example
        var query = new Query("UNWIND {towns} AS town RETURN town", new Dictionary<string, object>
        {
            { "towns", towns }
        });

        var result = await session.RunAsync(query);
    }
}
catch (Exception ex)
{
    string error = $"ERROR (ADD TOWNS): {ex.ToString()}";
    Console.WriteLine(error);
}
finally
{
    await session.CloseAsync();
}
person Pablissimo    schedule 18.04.2020