как запросить многоуровневый - PullRequest
2 голосов
/ 24 июня 2019

Я делаю юрист простое приложение для расчета комиссионных агентов у нас есть две категории агентов

  1. первый агент - кто привел новых клиентов в адвокатскую контору
  2. второй агент - кто тоже приносит агента и получает комиссию

Я использую идентичность asp.net, лучшую практику для создания этого отношения к добавлению поля с именем Parent с типом Application user в качестве коллекции в классе пользователя приложения

public virtual ICollection<ApplicationUser> Parent { get; set; }

затем создайте отношения.

 modelBuilder.Entity<ApplicationUser>()
                .HasMany(u => u.Parent)
                .WithMany()
                .Map(m =>
                {
                    m.MapLeftKey("Id");
                    m.MapRightKey("ParentId");
                    m.ToTable("User_Parent");

                });

теперь я могу получить родителя агента, но я пытался получить ребенка от родителя, но не смог найти наилучшую практику для этого

public ActionResult ViewAgent(string Id)
        {
            //Get selected agent with related data
            var Agent = _context.Users.Single(c => c.Id == Id);
            _context.Entry(user).Collection(u => u.Clients).Load();
            _context.Entry(user).Collection(u => u.Parent).Load();
            foreach (var item in user.Clients)
            {
                _context.Entry(item).Collection(c => c.Case).Load();
                foreach (var charge in item.Case)
                {
                    _context.Entry(charge).Collection(c => c.CaseCharge).Load();

                }
            }

            //select agent Child's of agent with related data
            // How can i query it ?? an error here but i am looking around
            var childs=  _context.Users.Where(u=>u.Parent.Select(p=>p.Id==Id))
            return View(user);
        }

Я ожидал запросить обходного агента выше для нового запроса в качестве родительского, после чего я смогу получить ребенка в списке

1 Ответ

0 голосов
/ 24 июня 2019

Если вы хотите, чтобы все пользователи имели одного и того же родителя, попробуйте:

var usersWithParent = _context.Users.Where(u => u.Parents.Any(p => p.Id == myParentId)).ToList();

Кроме того, см. Мой комментарий о быстрой загрузке всех ваших коллекций сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...