c # entity framework — запрашивать и объединять несколько таблиц / сущностей

#c# #mysql #entity-framework #rest #entity-framework-core

#c# #mysql #entity-framework #остальное #entity-framework-core

Вопрос:

Предполагая, что у меня есть следующие таблицы (с аналогично сформированными моделями плюс несколько виртуальных реквизитов)

Таблица 1: «AgentCompany» (просто связывает идентификатор агента с компанией)
AgentCompanyId, AgentID, CompanyID

Таблица 2: «Company»
Идентификатор компании, идентификатор страны

Таблица 3: «Страна»
Идентификатор страны, название

Модель для AgentCompany имеет виртуальное свойство для «Company», а модель для «Company» также имеет виртуальное свойство «Country».

В настоящее время мой запрос выглядит так

 var res = (from ap in Repo.AgentCompany
           join p in Repo.Company on ap.CompanyId equals p.CompanyId
           join c in Repo.Country on ap.Country.Name equals c.Name
           where ap.AgentId == AgentFilter
           select new AgentCompany
           {
               Company = p
           });
  

Это работает, и я получаю все свои данные, за исключением того, что компания (p) имеет свою страну как нулевую.
Я пытаюсь понять, как заставить этот синтаксис работать, чтобы, поскольку я могу запрашивать страну, как показано выше, я хотел p.Country = c, поэтому в результате моего объекта AgentCompany свойство Company является фактической компанией, а свойство виртуальной страны компании указывает на объект COuntry.

Кто-нибудь знает, как я мог бы этого добиться? Я попробовал несколько поисковых запросов и попробовал несколько предложений, связанных с внутренним объединением или методом «Включить», но я не смог достичь того, чего я хочу здесь.

Заранее спасибо!

Комментарии:

1. «с аналогично сформированными моделями плюс несколько виртуальных реквизитов» — я предполагаю, что вы имеете в виду свойства навигации (virtual здесь ни при чем), но они необходимы — при правильных свойствах навигации вам не нужны все эти объединения и выборки. Запрос должен быть простым AgentCompany.Include(ac => ac.Company).ThenInclude(c => c.Country).Where(ac => ac.AgentId == AgentFilter)

2. Я не использую синтаксис метода

3. Извините, не закончил этот комментарий для мобильных устройств — есть ли способ сделать это в linq?