Я работаю над приложением базы данных, которое показывает отчет о транзакции по его тегам.GroupBy в LINQ?
Это моя база данных.
Title Amount TagsReport (string[] array)
Food 5 "Hotel","Friends"
Food 6 "Hotel"
Family 8 "Hotel","Mobile"
Family 9 "Electricity"
Food 8 "Party"
Я хочу, чтобы сгенерировать отчет, как показано ниже:
Желаемая Выход:
Percentage Title Amount
53% Food 19
Hotel 11
Friends 5
Party 8
57% Family 17
Hotel 8
Mobile 8
Electricity 9
не имеют достаточно знаний о LINQ. Поэтому я сталкиваюсь с множеством проблем в этом поиске идеального решения.
Однако я нахожу этот код, чтобы использовать,
var ReportingData = ReportListQuery
.Where(Item => Item.Category == "expense")
.GroupBy(item => item.Title)
.Select(itemGroup => new
{
Percentage = Math.Round((itemGroup.Sum(item => item.Amount)/MonthExpense) * 100),
ExpenseTitle = itemGroup.Key,
ExpenseCalculation = itemGroup.Sum(item => item.Amount),
TotalTagAmounts = itemGroup
.SelectMany(item => item.TagsReport.Select(tag => new {
Tag = tag,
Amount = item.Amount
})
.GroupBy(tagAmount => tagAmount.Tag)
.Select(tagAmountGroup => new
{
Tag = tagAmountGroup.Key,
TotalAmount = tagAmountGroup.Sum(tagAmount => tagAmount.Amount)
}))
});
И выход подобен;
Percentage Title Amount
53% Food 19
Hotel 5
Friends 5
Hotel 6 //Hotel should be grouped here and should with the value 11 :-(
Party 8
57% Family 17
Hotel 8
Mobile 8
Electricity 9
Но мой желаемый результат является:
Percentage Title Amount
53% Food 19
Hotel 11
Friends 5
Party 8
57% Family 17
Hotel 8
Mobile 8
Electricity 9
Как вы видите, я сделал все. Но не «отель» сгруппирован в отчетах. Что я делаю не так? Пожалуйста, порекомендуйте!
Непонятно, почему это из двух групп «Название», у вас может быть процентная доля, составляющая 110%.Также непонятно, почему сумма для данной группы «Название» может считать один и тот же «тег» дважды (т. Е. Элемент, который имеет как «Hotel», так и «Friends», включен в оба) –