LINQ удваивает GroupBy и форматирует результат в массив

#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(); Затем вы будете группировать по идентификатору пользователя