Связывание всех узлов двух типов по идентификаторам

С помощью следующего кода я создаю 2 типа узлов. В Neo4J

  public async Task CreateData()
  {
     AddNodesAsync<Companies>(myCompanies);
     AddNodesAsync<Employess>(myEmployes);
  }

  public Task AddNodesAsync<T>(List<T> nodes)
    {
        return client
            .Cypher
            .Create("(n:" + typeof(T).Name + " {nodes})")
            .WithParams(new {nodes})
            .ExecuteWithoutResultsAsync();
    }

У каждого сотрудника есть идентификатор компании. Теперь я хочу связать их все, когда идентификатор компании сотрудника совпадает с идентификатором компании.

С помощью следующего кода я могу связать одного сотрудника с одной компанией

await client.Cypher
            .Match("(company:Company)", "(employee:Employee)")
            .Where((employee: company) => employee.ComanyId == company.Id)                       
            .Create("employee-[:BELONGS_TO]->company")
            .ExecuteWithoutResultsAsync();

но как я могу сказать, что он должен связать всех занятых этим идентификатором с их корреспондентом и компанией?

1 ответ

Решение

Я предполагаю, что где-то есть опечатка, это код, который я использую, который генерирует ссылки так, как вы говорите.

Используя их как POCO:

public class Company {
    public int Id { get; set; }
}

public class Employee {
    public int Id { get; set;}
    public int CompanyId { get; set;}
}

Добавление их:

var companies = new List<Company> { new Company { Id = 1 }, new Company {  Id = 2 } };
var employees = new List<Employee>
{
    new Employee{ Id=1, CompanyId =1 },
    new Employee{ Id=2, CompanyId =1 },
    new Employee{ Id=3, CompanyId =1 },
    new Employee{ Id=4, CompanyId =2 },
    new Employee{ Id=5, CompanyId =2 },
};

await AddNodesAsync(companies);
await AddNodesAsync(employees);

Следующий бит генерирует график, как вы ожидаете, с правильно созданными отношениями.

await client.Cypher
    .Match("(company:Company)","(employee:Employee)")
    .Where((Company company, Employee employee) => employee.CompanyId == company.Id)
    .Create("(employee)-[:BELONGS_TO]->(company)")
    .ExecuteWithoutResults();
Другие вопросы по тегам