#c# #linq
#c# #linq
Вопрос:
Имея следующее:
Methods = dbExpenses
.SelectMany(e => e.UserExpenses, (expense, ue) => new { expense, ue })
.GroupBy(e => new { e.ue.Method, e.ue.UserId })
.Select(x => new GetInsightsByMethodDto {
Method = x.First().ue.Method.ToString(),
Frequency = x.Count()
}).ToList()
Я успешно сгруппировал результат по обоим Method
и UserId
, и ответ правильный как таковой:
"methods": [
{
"method": "Cash",
"frequency": 1
},
{
"method": "Cash",
"frequency": 2
},
{
"method": "Transfer",
"frequency": 1
}
]
Пользователь один использовал как карту, так и передачу с частотой 1 для каждого. Однако второй пользователь использовал Cash с частотой 2. Итак, как вы можете сказать, первый объект в массиве предназначен для пользователя, а также для последнего элемента. Однако второй элемент предназначен для второго пользователя.
Однако желаемый результат выглядит следующим образом:
"methods": [{
"method": "Cash",
"frequency": 1
},
{
"method": "Transfer",
"frequency": 1
}
], [{
"method": "Cash",
"frequency": 2
}]
Который состоит из секунды array
для другого пользователя.
Чего мне здесь не хватает? Заранее спасибо за помощь!
Комментарии:
1. Привет, может быть, вам следует сгруппировать по идентификатору пользователя раньше, чтобы получить 2 объекта в списке. Первый для пользователя один, а второй для пользователя два. Внутри каждого массива вы должны получить их метод и частоту.
2. @EmanueleLeoni Привет, спасибо за помощь, но разве код, который у вас здесь, не идентичен тому, который я вставил выше?
3. извините, я его редактирую
4. Методы = dbExpenses . Выберите many(e => e.UserExpenses, (расход, ue) => new {расход, ue }) .GroupBy(e => new { например, метод, например. Идентификатор пользователя }) .Select(x => new NewModelDto {Идентификатор пользователя = x..First().ue.Идентификатор пользователя, методы и частота = new GetInsightsByMethodDto { Метод = x.First().ue.Метод. toString(), Frequency = x.Count() }) . ToList(); Затем вы будете группировать по идентификатору пользователя