Answer the question
In order to leave comments, you need to log in
How to declare a variable to hold the result of a GroupBy() done in EF Core outside of the current class?
EF Core - there is a selection from the database:
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);
}
public class GroupReportDto
{
public ICollection<GroupReportCategoryDto> Categories { get; set; }
}
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);
}
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question