Как применить Expression> к свойству в другом Expression> в Entity Framework Core
В базе данных у меня есть 2 таблицы:
public class ClassA
{
public int Id {get;set;}
public string Name {get;set;}
public int Code {get;set;}
public string Type {get;set;}
}
public class ClassB
{
public int Id {get;set;}
public string Name {get;set;}
public ClassA ClassA {get;set;}
}
Для получения списка записей ClassB, с только необходимыми полями(чтобы не тянуть все поля из базы), я создал Expression и применяю его в Select:
public static Expression<Func<ClassB, SelectedClassBDto>> Projection =>
c => new SelectedClassBDto
{
Id = c.Id,
Name = c.Name,
//ClassA = ???? //SelectedClassADto
};
dbContext.ClassB.AsQueryable().Select(ClassB.Projection).ToListAsync();
Для ClassA у меня тоже есть Expression, с полями Id, Name и Code.
public static Expression<Func<ClassA, SelectedClassADto>> Projection =>
c => new SelectedClassADto
{
Id = c.Id,
Name = c.Name,
Code = c.Code
};
Что нужно сделать с ClassB.Projection(или с ClassA.Projection), чтобы там можно было мапить свойство ClassA и при этом чтобы EFCore забирал только нужные данные из таблицы ClassA, а не все столбцы? Мне нужно решение, которое будет можно применять для нескольких таблиц и не особо хочется копировать просто создание объекта во всех Select.
В идеале, я хочу получить что-то типа такого:
public static Expression<Func<ClassB, SelectedClassBDto>> Projection =>
c => new SelectedClassBDto
{
Id = c.Id,
Name = c.Name,
ClassA = ClassA.Projection
};
Я использую ef core 3.1. Видел решение примерно такой же проблемы для ef core 2, но оно не работает для ef core 3.1.