Как применить 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.


Ответы (0 шт):