#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?