Выберите только определенные столбцы из включенной таблицы в Entity Framework Core
Если у меня есть это
var selectedEntities = db.MyEntities.Include(item => item.RelatedEntities);
Он загрузит все свойства (столбцы) в MyEntities, а также все свойства в ReleatedEntities. Если мне нужно только одно свойство от RelatedEntities, как бы мне это указать?
2 ответа
используйте .Select() и анонимный тип, чтобы ограничить нужные столбцы
var result = await _appDbContext.Companies
.AsNoTracking()
.Select(company => new
{
Company = company,
EmployeeIds = company.Employees.Select(emp => emp.Id)
})
.ToListAsync()
.ConfigureAwait(false);
Я искал то же самое, и после обращения к другим вопросам кажется, что это невозможно. Я понял, что сущность EF представлена коллекцией его свойств, и, следовательно, загрузка отдельных значений не будет полностью определять сущность.
Чтобы загрузить только выбранные свойства, нам нужно использовать запрос Select вместо загрузки связанных данных. Запрос приведет к анонимному типу.
Примечание. Если результирующий тип содержит какую-либо сущность, изменения будут отслежены. См. Отслеживание и прогнозы
Рекомендации: