После GroupBy объедините несколько записей в группе в одну - PullRequest
0 голосов
/ 26 мая 2020

Контекст

У меня есть такой POCO:


public class Schedule
{
    string ScheduleType
    string DayOfWeek
    int Id
    string Description
    DateTime StartDateTime
    DateTime EndDateTime
    List<string> GroupedDaysOfWeek
}


И у меня есть запрос LINQ, который извлекает List<Schedule>, который затем группирую по идентификатору , StartDateTime, EndDateTime.


schedule.GroupBy(s => new { s.Id, s.StartDateTime, s.EndDateTime })

Это дает мне несколько групп, где каждая запись в группе имеет разные DayOfWeek (ПОНЕДЕЛЬНИК, ВТОРНИК и т. Д. c), с одинаковыми Id, StartDateTime, EndDateTime, например это для каждой группы:

Schedule1 - 1/1/2020 9:00:00AM, 12/31/2021 11:59:59AM, 37, MONDAY
Schedule2 - 1/1/2020 9:00:00AM, 12/31/2021 11:59:59AM, 37, TUESDAY
Schedule3 - 1/1/2020 9:00:00AM, 12/31/2021 11:59:59AM, 37, WEDNESDAY
Schedule4 - 1/1/2020 9:00:00AM, 12/31/2021 11:59:59AM, 37, THURSDAY
Schedule5 - 1/1/2020 9:00:00AM, 12/31/2021 11:59:59AM, 37, FRIDAY

Что я хотел бы сделать: Взять эти записи на группу и объединить sh их в одну запись, используя List GroupedDaysOfWeek , например:

Schedule1 - 1/1/2020 9:00:00AM, 12/31/2021 11:59:59AM, 37, List(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY)

Что я пробовал: Я новичок в LINQ и безуспешно пытался использовать .Select() или .Aggregate() после .GroupBy().

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

try:

var groups = schedule.GroupBy(s => new { s.Id, s.StartDateTime, s.EndDateTime })
                     .Select(g => new { key = g.Key, days = g.Select(schedule=> schedule.DayOfWeek)});

это вернет IEnumerable анонимного объекта, содержащего ваш ключ, и IEnumerable дней недели.

1 голос
/ 26 мая 2020

Используйте это, чтобы получить результаты в классе расписания

          var results = schedule.GroupBy(s => new { s.Id, s.StartDateTime, s.EndDateTime })
              .Select(x => new Schedule()
              {
                  ScheduleType = x.First().ScheduleType,
                  Id = x.Key.Id,
                  Description = x.First().Description,
                  StartDateTime = x.Key.StartDateTime,
                  EndDateTime = x.Key.EndDateTime,
                  GroupedDaysOfWeek = x.Select(y => y.DayOfWeek).ToList()
              }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...