@Dogrtt
Qt/Python разработчик

Как объявить переменную для хранения результата GroupBy() сделанного в EF Core вне текущего класса?

EF Core - есть выборка из базы:

var transactions = _context.Transactions
    .Include(s=>s.Buyer)
    /*...*/
    .Select(s=>new
    {
        TransactionId = s.Id,
        BuyerName = s.Buyer.Name,
        /*...*/
    })
    .ToListAsync();

Далее мне надо расфасовать полученные данные по различным группам, а потом каждую подгруппу еще на какие-то группы и т.д. (в итоге получается такой себе граф). Так вот, я делаю первую группировку для корневого списка:

// Для примера возьмем корневой категорией - Тип транзакции
// В дальнейшем он может быть произвольным
var groupedTransactions = transactions.GroupBy(s => s.TransactionType);
foreach (var group in groupedTransactions )
{
    var newGroup = new GroupReportCategoryDto();
    newGroup.Id = 1;
    newGroup.Count = group.Count();
    newGroup.TransactionsGroupedByCategory = group;
    newReport.Categories.Add(newGroup);
}

newReport - это DTO класс с массивом корневых элементов:

public class GroupReportDto
{
    public ICollection<GroupReportCategoryDto> Categories { get; set; }
}

, а GroupReportCategoryDto:

public class GroupReportCategoryDto
{
    public int Id { get; set; }
    public int Count { get; set; }
    public ICollection<GroupReportCategoryDto> SubCategories { get; set; }

    // Тут я решил хранить сгруппированные транзакции для текущей
    // категории, чтоб в последствии из них делать следующие подгруппы
    public IGrouping<string, dynamic> StudiesGroupedByCategory { get; set; }

    public void SetSubCategories(int categoryId)
    {
        // Опустил тут switch/case по передаваемому типу,
        // потом, скорее всего, буду Expression передавать.

        // Вот тут проблема, пишет, что:
        // RuntimeBinderException: 'object' does not contain a definition for 'Sex'
        var groupedStudies = TransactionsGroupedByCategory.GroupBy(s => s.Sex);
        foreach (var group in groupedTransactions)
        {
                var newGroup = new GroupReportCategoryDto();
                newGroup.Id = 6;
                newGroup.Count = group.Count();
                SubCategories.Add(newGroup);
        }
    }
}

вопрос, как объявить TransactionsGroupedByCategory в GroupReportCategoryDto, чтоб он видел нужные свойства? Причем, в брейкпоинтах смотрю - всё норм, типы совпадают.
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы